1、v-if在模板中,可以根据条件进行渲染。条件用到的是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>
2、在<template>上使用v-if有时候我们想要在一个条件中加载多个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>
3、用 key 管理可复用的元素另外,在模板中,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> <label for="email">Email</label> <input type="text" id="email" name="email" placeholder="邮箱"> </template> <div> <button @click="changeLoginType">切换登录类型</button> </div></div><script> const app = new Vue({ el: "#app", data: { loginType: "username" }, methods: { changeLoginType(){ // 如果类型为username,则切换成email,否则反之 this.loginType = this.loginType==="username"?"email":"username"; } } })</script> 接下来我们查看下效果图: 
这个里面会有一个问题,就是如果我在username 的输入框中输入完信息,切换到邮箱中,之前的信息还是保留下来,这样肯定不符合需求的,如果我们想要让html 元素每次切换的时候都重新渲染一遍,可以在需要重新渲染的元素上加上唯一的key 属性,其中key 属性推荐使用整形,字符串类型。 示例代码如下: <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> <label for="email">Email</label> <input type="text" id="email" name="email" placeholder="邮箱" key="email"> </template> <div> <button @click="changeLoginType">切换登录类型</button> </div></div> 我们可以看到用户名原来输入的123 切换到邮箱方式时,输入框中的123 不见了
注意: <label>元素仍然会被高效地复用,因为它们没有添加key属性。
4、v-show
另一个用于根据条件展示元素的选项是 v-show 指令。用法大致一样:
<h1 v-show="ok">Hello!</h1> 不同的是带有 v-show 的元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的 CSS property display 。 注意:v-show 不支持 <template> 元素,也不支持 v-else。
4.1 v-if 对比 v-showv-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做 下载地址: JavaScript实现标签页切换效果 Vue 购物车案例练习
|