Vue指令详解

449 阅读3分钟

概念:

在学习vue指令之前,我们要先明白,所有的vue指令本质上都是对dom操作的封装,另外,如果指令有值,那么这个值即是响应式变量,也是表达式

基本指令:

文本类指令

Mustache语法:
{{message}}

Mustache语法也叫文本插值也叫双大括号语法,里面可以写变量,表达式等。 {{}}的缺点是刷新页面时会出现‘一闪而过’的效果,解决办法可以用v-text代替或者使用v-cloak(注意v-cloak没有值)加display:none代替。

v-text:

v-text专门用于文本类的声明式变量,比如字符串,数值等,如果渲染的变量是布尔值,默认会进行隐式转换,转换成对应的字符串,如果变量是null或者undefined,则不进行渲染,v-text相当于原生的innerHTML。

v-html:

v-html 专门用于渲染html字符串,也就是说如果声明式变量是一个html字符串,vue默认是不会渲染的,而是会当成普通字符串,该显示啥就显示啥,当加上v-html, vue就会识别,比如将字符串'百度'识别成a标签。

v-once

对应的声明变量只会渲染一次,再次更改时试图不会更新(后面没有值)

动态指令

v-bind:

v-bind用来动态绑定元素的属性,几乎所有的属性都可以动态绑定,在实际开发中主要用来动态绑定style和class。绑定方式有数组语法和对象语法。

事件指令

v-on:

语法糖: @ v-on用来绑定事件,有几个修饰符: .prevent 阻止默认行为 .stop 阻止事件冒泡 .enter 键盘事件时,同时使用多个修饰符时可以链式调用 事件不传参时,默认参数是事件对象,如果事件需要传参,则要用函数调用的方式传入所需的参数,如果同时还要传入事件对象,则需要手动传入$event

不需要传参:
<tag @click="handler"> </tag>
需要传参:
<tag @click="handler(1,2,$event)"> </tag>

表单绑定

v-model:

表单的双向绑定, 背后原理是v-bind绑定对应声明变量的值,change事件传入事件对象绑定表单的是值, 修饰符: .lazy等表单输入完页面再更新,.number限制只输入数字,.trim去除表单value值头尾的空格

循环列表

v-for

v-for用来循环数组,数字,对象,以及一切可迭代的对象

v-for="(item,index) in list"
  • 循环数组: index从0开始
  • 循环数字: index从1开始,直到这个数字
  • 循环对象 index从0开始
v-for="(value,key,index) in obj"  //循环对象第一个是值,第二个是键,第三个是索引

条件渲染

v-show:

v-show后面的条件为true时显示对应的元素,反之隐藏,本质是从css层面使用display:none对元素进行显示和隐藏

v-if/v-else-if/v-else

同样,当v-if/v-else-if后面的条件为true才对元素进行显示,否则隐藏,但是v-if/else的本质是从DOM层面对元素进行显示与隐藏,当条件为false时,vue根本不会渲染dom元素。(v-if是惰性的)

对比:v-show的 v-for用来循环数组,数字,对象,以及一切可迭代的对象,v-if的切换性能开销比较大当一个元素需要频繁进行显示与隐藏时,建议使用v-show,否则使用v-if

其他指令:

v-pre

不常用,主要用:来调试

v-slot:

组件化开发时使用

总结

vue基本指令包括:

  • 文本类指令: {{}}、v-text、v-html、v-once四个

  • 动态指令: v-bind

  • 事件绑定指令: v-on

  • 表单双向绑定指令: v-model

  • 条件渲染指令: v-show、v-if/v-else-if/v-else

  • 其他指令: v-pre、v-slot。