Vue的指令语法

95 阅读4分钟

功能:

用于解析标签(包括:标签属性、标签体内容、绑定事件.....)

事件绑定

v-on

用于绑定事件,例:

<input type="text" placeholder="请输入" v-on:keyuo="showInfo">

v-on可以简写为@,即:v-on:事件名 简写为 @事件名。

@click="demo($event)" 可以传参,并且不会丢失事件对象

v-on="{事件名:方法名,事件名:方法名,.....}" 来绑定多个事件

数据绑定

v-bind

单向数据绑定,它是为标签里的某个属性绑定值用的,例:

<input type="text" v-bind:value="aname">

v-bind可以简写为 : ,即:v-bind:href="xxx" 简写为 :href="xxx"

v-model

双向数据绑定,只能应用在表单类元素(如:input、select等)

v-model:value 可以简写为 v-model,因为v-model默认收集的就是value值。

循环渲染

v-for

遍历

遍历普通数组

语法 : v-for="(item,index) in array"

item : 数组中的每一项

index : 索引值

如果只需要第一个参数item ,index可以不写,括号可以省略

遍历对象数组

语法 : v-for="(item,index) in array"

item : 数组中的每一项(每一个对象)

index : 索引值

如果只需要第一个参数item ,index可以不写,括号可以省略

遍历对象

语法 : v-for="(value,item,index) in obj"

value: 属性值

item : 属性名

index : 索引值

<ul>
    <li v-for="(p,index) in persons" :key="index">
        id:{{p.id}} - name:{{p.name}} - age:{{p.age}}
    </li>
</ul>
key的内部原理
  1. 虚拟DOM中key的作用 key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】, 随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较,比较规则如下:

  2. 对比规则 (1).旧虚拟DOM中找到了与新虚拟DOM相同的key: ①.若虚拟DOM中内容没变, 直接使用之前的真实DOM! ②.若虚拟DOM中内容变了, 则生成新的真实DOM(数据不同的地方),随后替换掉页面中之前的真实 DOM。 (2).旧虚拟DOM中未找到与新虚拟DOM相同的key 创建新的真实DOM,随后渲染到到页面。

  3. 用index作为key可能会引发的问题

    1. 若对数据进行:逆序添加、逆序删除等破坏顺序操作: 会产生没有必要的真实DOM更新 ==> 界面效果没问题, 但效率低。
    2. 如果结构中还包含输入类的DOM: 会产生错误DOM更新 ==> 界面有问题。
  4. 开发中如何选择key?

    1. 最好使用每条数据的唯一标识作为key, 比如id、手机号、身份证号、学号等唯一值。
    2. 如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,使用index作为key是没有问题的。

条件渲染

v-show

条件渲染,v-show指令通过改变元素的css属性(display)来决定元素是显示还是隐藏。

v-show = false时,相当于设置了样式的display为none

v-if v-else-if v-else

条件渲染,与v-show类似,唯一不同的是,当v-if = false时,直接删掉DOM结构

v-else-if和v-else正常用,但是中间不能被打断

渲染文本

v-text

用于将数据填充到标签中,作用于插值语法表达式类似,但是没有闪动问题 (如果数据中有HTML标签会将 html标签一并输出 )

注意:
  1. v-text会把解析到为文本完全替换掉标签里的内容
  2. 不能解析字符串,v-text会把所有的字符串都当成正常的文本解析,不会当成标签,即使你的data里的str数据中有标签结构
v-html
  1. 作用:向指定节点中渲染包含html结构的内容。

  2. 与插值语法的区别:

    1. v-html会替换掉节点中所有的内容,{{xx}}则不会。
    2. v-html可以识别html结构。
  3. 严重注意:v-html有安全性问题!!!!

    1. 在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。
    2. 一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!

其它指令

v-cloak指令(没有值):
  1. 本质是一个特殊属性,Vue实例创建完毕并接管容易后,会删掉v-cloak属性
  2. 使用CSS配个v-cloak可以解决网速慢时页面展示出{{xxx}}的问题
v-once指令(没有值):
  1. 所在节点在初次动态渲染后,就视为静态内容了
  2. 以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能
v-pre指令:
  1. 让Vue跳过其所在节点的编译过程
  2. 可以利用他跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译