条件判断:
在模板中,可以根据条件进行渲染。条件用到的是v-if
、v-else-if
以及v-else
来组合实现的。
<div id="app">
<p v-if="weather == 'sun'">今天去公园玩!</p>
<p v-else-if="weather == 'rain'">今天去看电影!</p>
<p v-else>今天哪儿也不去!</p>
</div>
<script>
let vm = new Vue({
el: "#app",
data: {
weather: 'sun'
}
});
</script>
有时候我们想要在一个条件中加载多个html
元素,那么我们可以通过template
元素上实现.
<div id="app">
<template v-if="age<18">
<p>数学多少分?</p>
<p>英语多少分?</p>
</template>
<template v-else-if="age>=18 && age<25">
<p>女朋友找到了吗?</p>
<p>考研究生了吗?</p>
</template>
<template v-else>
<p>二胎生了吗?</p>
<p>工资多少?</p>
</template>
</div>
<script>
let vm = new Vue({
el: "#app",
data: {
age: 24
}
});
</script>
在模板中,Vue
会尽量重用已有的元素,而不是重新渲染,这样可以变得更加高效。如果你允许用户在不同的登录方式之间切换:
<div id="app">
<template v-if="loginType=='username'">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" placeholder="用户名">
</template>
<template v-else-if="loginType=='email'">
<label for="email">邮箱:</label>
<input type="text" id="email" name="email" placeholder="邮箱">
</template>
<div>
<button v-on:click="changeLoginType">切换登录类型</button>
</div>
</div>
<script>
let vm = new Vue({
el: "#app",
data: {
loginType: "username"
},
methods: {
changeLoginType: function(event){
this.loginType = this.loginType=="username"?"email":"username";
}
}
});
</script>
这个里面会有一个问题,就是如果我在username
的输入框中输入完信息,切换到邮箱中,之前的信息还是保留下来,这样肯定不符合需求的,如果我们想要让html
元素每次切换的时候都重新渲染一遍,可以在需要重新渲染的元素上加上唯一的key
属性,其中key属性推荐使用整形,字符串类型。用key
来保证两个input
元素的不一致性,就不会有重用的问题了
<div id="app">
<template v-if="loginType=='username'">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" placeholder="用户名" key="username">
</template>
<template v-else-if="loginType=='email'">
<label for="email">邮箱:</label>
<input type="text" id="email" name="email" placeholder="邮箱" key="email">
</template>
<div>
<button v-on:click="changeLoginType">切换登录类型</button>
</div>
</div>
注意,<label>
元素仍然会被高效地复用,因为它们没有添加key
属性
v-show
和v-if
对比:
-
v-if
是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。 -
v-if
是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
3.v-show
就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于CSS进行切换。
一般来说,
v-if
有更高的切换开销,而v-show
有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用v-show
较好;如果在运行时条件很少改变,则使用v-if
较好