Vue 基本指令使用(二)
1、模板语法:
使用双大括号(Mustache 语法) “{{ }}” 是最基本的文本插值方法,它会自动将我们双向绑定的数据实时显示出来。例如:
<template> <div id="app"> <p>{{ msg }}</p> <p>{{ 20+1 }}</p> <p>{{ "ok" ? 'yes' : 'no' }}</p> </div> </template> <script> export default { name: 'HelloWorld', data () { return { msg: 'Welcome to Your Vue.js App' } } } </script>
2、v-once 指令:
作用是定义它的元素或组件只渲染一次,包括元素或组件的所有子节点。首次渲染后,不再随数据的变化重新渲染,将被视为静态内容。例如:
<template> <div id="app"> <span v-once>{{ msg }}</span> </div> </template> <script> export default { name: 'HelloWorld', data () { return { msg: 'hello vue' } } } </script>
v-once 在业务中很少使用,当需要进一步优化性能时,可能会用到。
3、v-html 指令:
作用是渲染 html 内容。有的时候想输出 html ,而不是将数据解释为纯文本,可以使用 v-html:
<template> <div id="app"> <span v-html="link"></span> </div> </template> <script> export default { name: 'HelloWorld', data () { return { link: '<a href="#">这是一个链接</a>' } } } </script>
但是需注意的是,虽然可以直接用 v-html 指令渲染html 内容,但在服务端要对提交的html 做处理, 避免发生xss 攻击。
4、v-bind 指令:
v-bind 指令作用是动态更新 html 元素上的属性,比如 id,class,src 等。例如:
<template> <div id="app"> <a v-bind:href="url">链接</a> <img v-bind:src="imgUrl" /> </div> </template> <script> export default { name: 'HelloWorld', data () { return { url: 'https://www.github.com', imgUrl: 'http://xxx.xxx.xx/img.png' } } } </script>
5、v-if、v-else-if、v-else 指令:
与 Javascript 的条件语句 if、else、else if 类似,Vue.js 的条件指令可以根据表达式的值在 DOM 中渲染或销毁元素组件,例如:
<template> <div id="app"> <p v-if="status === 1">当status为1时显示该行</p> <p v-else-if="status === 2">当status为2时显示该行</p> <p v-else>否则显示该行</p> </div> </template> <script> export default { name: 'HelloWorld', data () { return { status: 1 } } } </script>
v-else-if 要紧跟 v-if, v-else 要紧跟 v-else-if 或v-if,表达式的值为真时, 当前元素/组件及所有子节点将被渲染,为假时被移除。
6、v-show 指令:
v-show 的用法与 v-if 基本一致,只不过 v-show 是改变元素的 css 属性 display。当 v-show 表达式的值为 false 时,元素会隐藏,查看 DOM 结构会看到元素上加载了内联样式 diplay:none。例如:
<template> <div id="app"> <p v-show="status === 1">当status为1显示该行</p> </div> </template> <script> export default { name: 'HelloWorld', data () { return { status: 2 } } } </script>
渲染后的结果为:
<p style="display: none;">当status为1显示该行</p>
7、v-if 与 v-show 选择:
1、v-if 和v-show 具有类似的功能,不过v-if 才是真正的条件渲染,它会根据表达式适当地销毁 或重建元素及绑定的事件或子组件。若表达式初始值为false ,则一开始元素/组件并不会渲染,只 有当条件第一次变为真时才开始编译。 2、而v-show 只是简单的css 属性切换,无论条件真与否,都会被编译。相比之下, v-if 更适合 条件不经常改变的场景,因为它切换开销相对较大,而v-show 适用于频繁切换条件。
8、v-for 指令:
(1)当需要将一个数组遍历或枚举一个对象循环显示时,就会用到列表渲染指令v-for 。它的表达式需结合in 来使用,类似 item in items 的形式。例如:
<template> <div id="app"> <ul> <li v-for="book in books">{{ book.name }}</li> </ul> </div> </template> <script> export default { name: 'HelloWorld', data () { return { books: [ {name: '《Vue.js实战》'}, {name: '《JavaScript高级程序设计》'} ] } } } </script>
(2)在表达式中, books 是数据, book 是当前数组元素的别名, 循环出的每个<li >内的元素都可以访问到对应的当前数据book 。列表渲染也支持用 of 来代替 in 作为分隔符,它更接近JavaScript 迭代器的语法:
<li v-for="book of books">{{ book.name }}</li>
(3)v- for 的表达式支持一个可选参数作为当前项的索引, 例如:
<li v-for="(book, index) in books">{{ index }} - {{ book.name }}</li>
(4)与 v-if 一样,v-for 也可以用在父标签上,将多个元素进行渲染:
<template> <div id="app"> <ul v-for="book in books"> <li>书名:{{ book.name }}</li> </ul> </div> </template> <script> export default { name: 'HelloWorld', data () { return { books: [ {name: '《Vue.js实战》'}, {name: '《JavaScript高级程序设计》'} ] } } } </script>
(5)对象的属性也是可以遍历的,例如:
<template> <div id="app"> <span v-for="value in user">{{ value }}</span> </div> </template> <script> export default { name: 'HelloWorld', data () { return { user: { name: 'Tom', gender: '男', age: 26 } } } } </script>
渲染后的结果为:
<span>Tom</span><span>男</span><span>26</span>
遍历对象时,有两个可选参数,分别是键名和索引:
<template> <div id="app"> <ul> <li v-for="(value, key, index) in user"> {{ index }} - {{ key }} : {{ value }} </li> </ul> </div> </template>
(6)v-for 还可以迭代整数:
<template>
<div id="app">
<span v-for="n in 10">{{ n }}</span>
</div>
</template>
渲染结果为:
1 2 3 4 5 6 7 8 9 10
参考:
《Vue.js实战》