Vue的特性
数据驱动视图
优势: 当数据发生变化时,页面也会自动重新渲染
双向数据绑定: 用表单元素时,视图变化影响数据,数据变化影响视图
内置(六大)指令
指令概念: 是Vue为开发这提供的模板语法,用于辅助开发者渲染页面的基本结构
1、内容渲染指令
v-text: 把值渲染到标签内部
{{ }}插值表达式: 内容占位符,不会覆盖标签内部内容;只能用在元素的内容节点中,不能用在元素的属性节点
v-html() :把带有标签的字符串,渲染成真正的html内容;跟插值表达式同时使用时,会覆盖插值表达式
2、属性绑定指令
v-bind:对元素的属性进行动态绑定
语法: v-bind:属性=''变量名' ,可简写为 :\
3、事件绑定指令
v-on
语法:v-on:事件名称=''事件处理函数的名称',可简写为 @
事件对象
event:绑定事件的处理函数名称,不传参,不带小括号,可以获取到元素dom的事件对象e,若是带小括号及传参了,则需要使用$event
提供了内置变量,它就是元素dom的事件对象e
修饰符
事件修饰符
语法: @:事件名称.修饰符=''事件处理函数的名称'
@事件类型.修饰符,可以不绑定事件处理函数,只阻止默认行为
. prevent: 阻止事件跳转,在事件名称后面加prevent,即可阻止跳转;
. stop : 阻止事件冒泡;
. capture : 以捕获模式触发当前的事件处理函数
. once : 绑定的事件只会触发1次
. self : 只有在event.target是当前元素自身时触发事件处理函数
按键修饰符
语法:@键盘事件.修饰符="变量名"
. esc:键盘按下键是esc调用
. enter:键盘按下键是enter调用
4、双向绑定指令
v-model
配合input表单使用此指令,真正实现数据驱动视图,视图驱动数据
修饰符
5、条件渲染指令
v-if
原理: 每次动态创建或者移除 元素,从而实现元素的显示与隐藏
性能: 若刚进入页面某些元素默认不需要被展示 ,而且后期这个元素很可能不需要被展示出来,此时v-if性能好
v-show
原理:动态为元素添加或者移除display:none样式,来实现元素的显示与隐藏
性能:若频繁切换元素显示状态,用v-show性能更好
总结: 实际开发中,不用考虑性能问题,直接使用v-if,性能问题是面试时说给面试官听的
v-if配套指令
v-else-if
v-else
6、列表渲染指令
v-for 循环
语法: v-for="( 值变量,索引变量)in 目标结构"
目标结构:可以遍历数组 / 对象 / 数字 / 字符串 (可遍历结构)
v-for页面更新
1:数组变更方法,会导致v-for更新,页面更新,会改变原数组
数组变更方法有:push() unshift() pop() shift() splice() reverse()
2:数组非变更方法,返回新数组(不会改变原数组),就不会导致v-for更新,可采用覆盖数组或者this.$set()
数组非变更方法有:filter()、concat()、slice()、map()
注意: 更新某个值的时候,v-for是监测不到
// 更改某一个值,无需更改所有数组
// 更新的目标结果、更新的位置、更新的值
this.$set(this.arr, 0, 100);
v-for 中 key 的作用
知识铺垫
** 虚拟 DOM**
是什么: 记录了关键 DOM 节点信息的 JS 对象
为什么: 为什么要用虚拟 DOM
如何用: diff算法对比规则,当数据更新时,将新旧 DOM 树,逐层对比,有 Key 就对比 Key,无 Key 就地更新
v-for 有无key的情况
无 Key: 就地更新策略,尽可能的复用相同的 DOM 元素,减少 DOM 操作
Key 是 index: 和无 Key 一样是就地更新
Key 是 id: 唯一的字符串或数字;新旧 DOM 对比时,使用 Key 进行比较,差异更新
自定义指令
原因:Vue内置指令满足不了需求,可自己定义
注册
全局注册
在mian.js(入口文件)中使用 指令是和标签元素绑定使用的;
inserted(el){}当元素插入到dom树上时执行函数
局部注册
在当前文件使用,跟methods、data等同个层级
自定义指令传值
- 使用场景:定义color指令-传入一个颜色, 给标签设置文字颜色
- 语法:v-指令名="值"
- 使用:在标签上使用 v-color="'red'"
- 指令值变化触发的方法:
- 自定义指令的update方法而非inserted方法