Vue.js:v-if条件渲染
Lasted 2020-01-11 11:01:19
v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true 值的时候被渲染。
v-if
<div id="app">
<h1 v-if="awesome">Vue</h1>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
awesome: true
}
})
</script>
[Vue warn]: Property or method "awesome" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property.
如果 data 中没有定义 awesome 属性会报错
v-else
<div id="app">
<h1 v-if="awesome">Vue!</h1>
<h1 v-else>Else</h1>
</div>
<!-- JS -->
<script>
var app = new Vue({
el: '#app',
data: {
awesome: false
}
})
</script>
注:v-else
元素必须紧跟在带 v-if
或者 v-else-if
的元素的后面,否则它将不会被识别。
v-else-if
<div id="app">
<div v-if="type === 'A'">
A
</div>
<div v-else-if="type === 'B'">
B
</div>
<div v-else-if="type === 'C'">
C
</div>
<div v-else>
Not A/B/C
</div>
</div>
<!-- JS -->
<script>
var app = new Vue({
el: '#app',
data: {
type: 'B'
}
})
</script>
v-show
另一个用于根据条件展示元素的选项是 v-show
指令。不同的是带有 v-show
的元素始终会被渲染并保留在 DOM 中。v-show
只是简单地切换元素的 CSS 属性 display。
<div id="app">
<h1 v-show="isShow">Hello!</h1>
</div>
<!-- JS -->
<script>
var app = new Vue({
el: '#app',
data: {
isShow: false
}
})
</script>
一般来说,v-if
有更高的切换开销,而 v-show
有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show
较好;如果在运行时条件很少改变,则使用 v-if
较好。
不推荐同时使用 v-if
和 v-for
。