vue的常用指令有:vue常用指令有:v-on指令、v-model指令、v-once指令、v-show指令、v-if指令、v-else指令、v-else-if指令、v-for指令、v-text指令、v-html指令、v-bind指令等等。
1.v-on
v-on 事件绑定指令,用来辅助程序员为DOM 元素绑定事件监听
语法: v-on:<事件类型>="<函数名>"由于v-on 指令在开发中使用频率非常高,因此,vue 官方为其提供了简写形式(简写为英文的@)
<body><div id="app"><!-- 完整写法 v-on: --><div v-on:click="clickfunc">点击事件</div><!-- 缩写 @ --><div @click="clickfunc">点击事件</div></div>
</body>
<script>new Vue({el:"#app",data:{},methods:{// 定义一个 点击函数 clickfunc:function(){console.dir('click event')} },})
</script>
2.v-model
vue中双向绑定是一个指令v-model,可以绑定一个动态值到视图,同时视图中变化能改变该值。v-model是语法糖,默认情况下相于:value和@input。
使用v-model可以减少大量繁琐的事件处理代码,提高开发效率,代码可读性也更好
通常在表单项上使用v-model
原生的表单项可以直接使用v-model,自定义组件上如果要使用它需要在组件内绑定value并处理输入事件。语法: v-model="<变量名>"
<body><div id="app"><div>val的值:{{val}}</div><div>val的值:{{val}}</div><input v-model="val"></div>
</body>
<script>new Vue({el:"#app",data:{val:'success'}})
</script>
3.v-once
v-once只会执行一次渲染,当数据发生改变时,不会再变化
<div id="app"><p v-once>{{msg}}</p><input v-model="msg" type="text" />
</div>
<script>let vue = new Vue({el:"#app",data:{msg:'今天气温'}})
</script>
4.v-show
v-show接受一个表达式或一个布尔值。相当于给元素添加一个display
属性
<div id="app"><div v-show="conditional == 'ok' ">{{msg}}</div><input v-model="msg" type="text" />
</div>
<script>let vue = new Vue({el:"#app",data:{msg:'今天气温',conditional:'ok'}})
</script>
5.v-if、v-else、v-else-if
v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true 值的时候被渲染。
v-if和v-show有同样的效果,不同在于v-if是重新渲染,而v-show使用display属性来控制显示隐藏。频繁切换的话使用v-show减少渲染带来的开销。
说明一下:v-if可以单独使用,v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别
v-if、v-else-if都是接受一个条件或布尔值,v-else不需要参数。比较简单,看看案例:
<div id="app"><div>小明评级为:<span v-if="score >= 90">优秀</span><span v-else-if="score >= 80">良好</span><span v-else-if="score >= 60">及格</span><span v-else>不及格</span></div>
</div>
<script>new Vue({el:"#app",data:{msg:'message',score:59, },})
</script>
6.v-for
v-for可用来遍历数组、对象、字符串。
<div id="app"><!-- obj --><div v-for="(att,val) in obj">{{att}}:{{val}}</div><!-- arr --><div v-for="(val, index) in arr">{{index}}:{{val}}</div><!-- string --><div v-for="astr in str">{{astr}}</div>
</div>
<script>new Vue({el:"#app",data:{obj:{name:'kk',age:'18',hobby:'pingpong'},arr:[1,2,3,4,4,5,6,7],str:'str hello world'},})
</script>
7.v-text和v-html
v-text
是渲染字符串,会覆盖原先的字符串
v-html
是渲染为html。{{}}
双大括号和v-text
都是输出为文本。那如果想输出为html。使用v-html
,如下例子
<div id="app"><div>{{innerHtml}}</div><div v-text="innerHtml"></div><div v-html="innerHtml"></div>
</div>
<script>new Vue({el:"#app",data:{innerHtml:'<button>一个按钮</button>'}})
</script>
8.v-bind
可以将标签内的属性值解析成js代码,在标签的属性中使用v-bind,双引号里的内容会被当作js解析(只能解析变量或三元表达式),如下:
如果给属性值设置为一个变量,那么可以使用v-bind
可以缩写为:<属性>="<变量>"
<div id="app"><!-- 完整写法 v-bind: --><div v-bind:class="className">"{{innerHtml}}"</div><!-- 缩写 : --><div :class="className">"{{innerHtml}}"</div><div v-text="innerHtml"></div><div v-html="innerHtml"></div>
</div>
<script>new Vue({el:"#app",data:{innerHtml:'<button>一个按钮</button>',className:'box'}})
</script>