Vue常用指令
指令(Directive)是带有“v-”前缀的特殊属性,它的值是单个JavaScript表达式,指令的职责是当表达式的值发生变化时,响应式的更新dom。
Vue和Angular的指令十分相似,如果有学过Angular在学习vue的指令时会感到十分亲切。
1.文本
Vue中向html中插值的方法有三种
Mustache语法 v-html v-text
(1)Mustache语法
Mustache语法(双大括号)是比较常见的数据绑定形式,当大双括号中绑定的数据对象更新时,相应的插值处的值也会更新
1
| <sapn>{{message}}</sapn>
|
如果有时你只希望只在页面初始化时进行插值,之后数据更新不在更新插值出的内容可以使用“v-once”指令
1
| <sapn v-once>{{message}}</sapn>
|
对于绑定的数据可以使用JavaScript表达式(注:每个绑定只能是单个表达式,不能是语句)
1 2 3
| <sapn>{{ number+1 }}</sapn> <sapn>{{ ok?'yes':'no' }}</sapn> <sapn>{{ message.split('').reverse().join('') }}</sapn>
|
(2)v-text
v-text和Mustache语法使用规则基本一致基本一致
1
| <sapn v-text="message"></sapn>
|
(3)v-html
v-text和Mustache语法会直接将数据展示,对于数据是html代码将不会进行解释会之间原封不动的展示,而如果你想输出正真的html代码,就可以使用v-html,testtHtml=”Hello World“
1
| <div v-text="rawHtml"></div>
|
渲染为
1 2 3
| <div> <sapn>Hello World</sapn> </div>
|
2.属性
Mustache语法不能将数据绑定到html属性上,vue为绑定数据到html属性上提给了v-bind指令。v-bind的缩写为“:”
1 2 3 4
| <!--完整语法 --> <p v-bind:title="message"> <!--缩写 --> <p :title="message">
|
用法:v-bind:属性名=属性值
1 2 3 4 5 6 7 8 9 10
| <div id="demo2"> <p v-bind:title="message">鼠标悬停</p> </div> var demo2 = new Vue({ el:"#demo2", data:{ message:"页面加载于" + new Date().toLocaleString() } });
|
属性中的特例,为了更好的绑定式样,class和style的值不仅可以是字符串还可以是对象和数组。而且v-bind:class的值还可以与其他普通的class共存
1 2 3 4 5 6 7 8
| <div id="classDemo"> <p class="mini-font-size" v-bind:class="{active:isActive,'text-success'}">test</p> </div> data:{ isActive:true, text-success:false }
|
最终的渲染结果为
1 2 3
| <div id="classDemo"> <p class="mini-font-size isActive">test</p> </div>
|
3.监听事件
为dom上绑定监听事件需要用到v-on指令。v-on的缩写为“@”
1 2 3 4
| <!--完整语法 --> <button v-on:click="reverseMessage"> <!--缩写 --> <button @click="reverseMessage">
|
一般用法v-on:事件名=绑定的方法 (还可添加修饰符和修饰键)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <div id="demo5"> <p v-text="message"></p> <button v-on:click="reverseMessage">逆转字符串</button> </div> var demo5 = new Vue({ el:"#demo5", data:{ message:"hello world" }, methods:{ reverseMessage:function(){ this.message = this.message.split("").reverse().join(""); } } });
|
4.条件渲染
v-if和v-show可以用于页面元素的展示和隐藏。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <div id="demo3"> <div v-if="isShow"> 这一段被显示 </div> <div v-if="!isShow"> 这一段不被显示 </div> </div> var demo3 = new Vue({ el:"#demo3", data:{ isShow:true } });
|
修改isShow的值可以控制组件的显示,当v-if和v-show的值为true时,绑定的组件将在页面中展示,为false时将被隐藏。有人会有这样的疑问,为什么两个使用的方法一样,展示的效果也一样为什么要v-if和v-show呢
v-if VS v-show
v-if是“真正的”的条件渲染,当为true时组件会被渲染,而当false时组件则会被摧毁,v-if页面初始化时为false将不渲染。
v-show时无论true还是false组件都会被渲染,只是基于css的切换。
两者比较v-if有更高的切换开销,而v-show可能会有更高的初始化开销
所以当页面中需要频繁的切换则使用v-show较好,而如果在初始化之后条件不太可能发生变化,使用v-if比较好。
5.表单输入绑定
你可以使用v-model元素在表单元素上进行双向数据绑定
1 2 3 4 5 6 7 8 9 10 11
| <div id="demo6"> <p v-text="message"></p> <input v-model="message" type="text"> </div> var demo6 = new Vue({ el:"#demo6", data:{ message:"" } });
|
6.列表渲染
是用v-for进行列表渲染,v-for需要使用“item in items”的语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <div id="demo4"> <ul> <li v-for="person in persons"> <span>姓名:{{person.name}},</span> <span>年龄:{{person.age}}</span> </li> </ul> /div> var demo4 = new Vue({ el:"#demo4", data:{ persons:[ {name:"张三",age:"20"}, {name:"李四",age:"21"}, {name:"王二",age:"22"}] } });
|
以上就是我整理的vue中的常用指令,活用这些指向将会使开发事半功倍。