(条件渲染)分支循环结构
分支结构
// v-if // v-else // v-else-if // v-show
v-if
指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回真实值的时候被渲染。
举个例子:
// template// 业务逻辑 data: { awesome: true, // 当值为true时,v-if模块才会渲染到页面当中,否则v-else渲染到页面当中 }if="awesome">Vue is awesome!
else>Oh no ??
// 当值为true时,页面显示结果如下:
// 当值为非真实的值时(例如:false或空),页面显示结果如下:
#在元素上使用v-if条件渲染分组
因为 v-if 是一个指令,所以必须将它添加到一个元素上。但是如果想切换多个元素呢?此时可以把一个 元素当做不可见的包裹元素,并在上面使用 v-if。最终的渲染结果将不包含 元素。
// template模版 if="ok">Title
Paragraph 1
Paragraph 2
// 业务逻辑 // ...
v-else-if、v-else
你可以使用 v-else 指令来表示 v-if 的“else 块”,v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。v-else-if 也必须紧跟在带 v-if 或者 v-else-if 的元素之后。
// template// 业务逻辑 data: { type: 'A', }if="type === 'A'">A
else-if="type === 'B'">B
else-if="type === 'C'">C
else>D
// 页面显示结果如下
#用key管理可复用的元素
Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。这么做除了使 Vue 变得非常快之外,还有其它一些好处。例如,如果你允许用户在不同的登录方式之间切换:
// template模版if="loginType === true"> else>// 业务逻辑 var vm = new Vue({ el: "#app", data: { loginType: true, }, methods: { toggle: function () { this.loginType = !this.loginType; } } });
// 点击切换按钮,显示效果如下:
上面代码也不总是符合实际需求,所以 Vue 为你提供了一种方式来表达“这两个元素是完全独立的,不要复用它们”。只需添加一个具有唯一值的 key attribute 即可:
// template模版if="loginType === true"> key="username-input"> else> key="email-input">// 业务逻辑 var vm = new Vue({ el: "#app", data: { loginType: true, }, methods: { toggle: function () { this.loginType = !this.loginType; } } });
// 点击切换按钮,显示效果如下:
注意, 元素仍然会被高效地复用,因为它们没有添加 key attribute。
v-show
指令用于条件性地渲染一块内容。 用法大致与if一样
v-if和v-show的区别:
v-if控制元素是否渲染到页面,v-show控制元素是否显示(已经渲染到了页面)。换句话说,v-if每次都会重新删除或者创建元素,而v-show不会,只是切换了元素的display样式。
// template模版// 业务逻辑 var vm = new Vue({ el: "#app", data: { type: false, // 注意当值为false时,两者皆不显示,区别在于绑定v-if指令的元素从结构中彻底删除,而绑定v-show的元素只是css属性:display:none,没有从html结构当中移除 } });if="type === true">v-if
v-show