<a v-if="isAuthor">修改</a>isAuthor定义在data中:
data: { isAuthor: true }
如果isAuthor为truthy,被定义的a标签被渲染;否则不被渲染。
演示:a标签应放置在Vue实例指定的模板中……
有了if,当然少不了v-else:
<span v-else>你无权修改</span>
从2.1.0开始,还可以v-else-if
<a v-else-if="isAdmin">删除</a>
注意:if...else之间不能有其他内容
因为还有一个指令:v-show,它才是控制“显示”的:
<a v-show="isAuthor">修改</a>
它总是渲染出这个a标签,并且给它加一display的style,这样来控制元素的显示与否:
<a style="display: none;">修改</a>
F12演示:v-show和v-if在页面呈现上的不同
@想一想@:如何选择使用 v-show 还是 v-if 呢?
类似于循环。
先准备数据:
data: { students:['夏康平','陈国栋', '韩佳宝'] //数组 }然后在要循环显示的html元素上使用v-for:
<li v-for="student in students">{{'欢迎新同学:'+student}}</li>for...in套用了ES5中属性迭代的写法(也可以写成for...of),student代表数组中单个的元素。
还可以很方便的获得数组元素的下标:
<li v-for="(student,index) in students"> <!--注意:多个{{}}的使用--> {{index+1}}-{{'欢迎新同学:'+student}} </li>
数组中的元素还可以是对象:
data: { students: [ { id: 8, name: '夏康平' }, { id: 12, name: '陈国栋' } ] }
<li v-for="student of students"> {{'欢迎新同学'+student.id+':'+student.name}} </li>
vue data中直接存放一个对象:
data: { student: { id: 8, name: '夏康平' } }遍历对象的属性:
<li v-for="prop in student"> {{prop}} </li>默认给的是对象属性的值。也可以添加属性的名称:
<li v-for="(prop,key) in student"> {{key}}:{{prop}} </li>甚至还可以再加上属性的索引(index):
<li v-for="(prop,key,i) in student"> [{{i}}]{{key}}:{{prop}} </li>
data: { students: [ { id: 8, name: '夏康平' }, { id: 12, score: 98 }, {name: '韩佳宝', from:'黑龙江'} ] }能不能把他们各自的属性依次取出来呢?
<p v-for="student of students"> <span v-for="value in student">{{value}};</span> </p>
如果我们用赋值的方式直接改变数组元素(不是数组本身),Vue实例不能响应式的渲染列表。
F12控制台对比演示:
vm.students = ['飞哥', '小鱼'] //重新赋值 vm.students[0] = '飞哥' //改变数组元素但是,如果我们使用JavaScript中定义的能直接变更当前数组的方法,Vue就能够侦听。
vm.students.shift() vm.students.unshift('邹丽')
所以,如果要替换的数组中某个元素的话:
vm.students.splice(1,1,'大飞哥')
如果数组方法是返回一个新数组,而不是改变当前数组的,需要用到赋值:
vm.students = vm.students.concat('飞哥')
另外,无论是数组自身变化,还是被重新赋值:
Vue都会智能的采用“就地复用”的策略,只就变化部分进行替换,尽可能的降低重新渲染的开销。
PPT动画演示:
这样做,大部分时候都没问题;但有时候会有问题(说明/代码演示等:在学习form表单绑定之后)
一般来说,都是在列表项中过滤(不渲染显示)某些项。比如,只显示数组索引号大于1的项:
@试一试@:是这样的么?
<p v-for="(student,i) of students" > <span v-if="i>1">{{i}}</span>: {{student}} </p>
@想一想@:为什么?
正确的写法是:
<p v-for="(student,i) of students" v-if="i>1"> <span>{{i}}</span>: {{student}} </p>但是,Vue并不推荐在同一个元素上同时使用v-if和v-for,为什么呢?(常见面试题)
推荐的方式:
多快好省!前端后端,线上线下,名师精讲
更多了解 加: