Vue知识点总结(更新中...)

162 阅读4分钟

Vue的数据代理

1. Vue中的数据代理定义:
通过vm对象来代理data对象中属性的操作(读/写)
2. Vue中数据代理存在的好处:
更加方便的操作data中的数据
3. 基本原理:
1).通过Object.defineProperty()把data对象中所有属性添加到vm上 
2).为每一个添加到vm上的属性,都指定一个getter/setter3).在getter/setter内部去操作(读/写)data中对应的属性。 

Vue事件总结

一、 事件的基本使用:

1. 使用 v-on:xxx 或者 @xxx 绑定事件,其中xxx是事件名称;
2. 事件的回调需要配置在methods对象中,最终会在vm上;
3. methods中配置的函数,不要用箭头函数!否则this就不是vm了;
4. methods中配置的函数,都是被Vue所管理的函数,this的指向是 vm 或者 组件实例对象;
5. @click='demo' 和 @click='demo($event)' 效果是一样的,但后者可以传参;

二、Vue中事件修饰符:

1. prevent:阻止默认事件(常用);
2. stop:阻止事件冒泡(常用);
3. once:事件只触发一次(常用);
4. capture:使用事件的捕获模式;
5. self:只有event.target是当前操作的元素时才触发事件;

Vue中的computed(计算属性)与 watch(监视属性)相关内容

一、Vue中计算属性(computed)理解

1. 定义:要用的属性不存在,要通过自己有属性计算来计算。
2. 原理:底层是借助Object.defineProperty方法提供的getter和setter来实现的。
3. get函数什么时候执行?
1).初次读取时会执行一次。 
2).当依赖的数据发生改变是会被再次调用。 
4. 优势:与mothods实现相比,内部有缓存机制(复用),效率更高,调试方便。
5.注意:
1).计算属性最终会出现在vm上,直接读取使用即可。 
2).如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变。

二、Vue中监视属性(watch)理解

监视属性
1. 当被监视的属性发生变化是,回调函数自动调用,进行相关操作。
2. 监视属性必须是存在的,才能进行监视!!!
3. 监视的两种写法:
1).new Vue时传入watch配置。
2).直接通过vm.$watch进行配置。
深度监视
1. Vue中的watch默认不监测对象内部值的变化的(一层的时候)
2. 配置deep:true可以监测对象内部值的变化的(多层的时候)
3. 注意事项:
1).Vue自身可以监测对象内部值的变化,但Vue提供的watch默认是不可以的。 
2).使用watch时根据数据的具体结构,来决定是否采用深度监视。

三、computed和watch之间的区别

区别:
  1. computed能完成的功能,watch都可以完成。
  2. watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。
重要的小原则:
  1. 所被Vue管理的函数,最好写成普通函数,这样this才指向的是vm 或者 组件的实例对象。
  2. 所有不被Vue所管理的函数(如:定时器的回调函数、ajax的回调函数及Promise的回调函数等),最好写成箭头函数,这样this的指向才是vm 或者 组件的实例对象。

条件渲染v-if与v-show

一、v-if的使用

写法:v-if="表达式"、v-else-if="表达式"、v-else="表达式"。
适用:切换频率比较低的场景。
特点:不展示DOM元素直接被移除。
注意点:v-if可以和v-else-if、v-else一起使用,但是结构不能被 "打断"。

二、v-show的使用

写法:v-show="表达式"。
适用:切换频率比较高的场景。
特点:不展示DOM元素,未被移除,相当于给DOM添加了个display:none的样式。

注意点

使用v-if时元素是不可以获取的,使用v-show是可以获取到元素的。

Vue中的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是没有问题的。

Vue监视数据的原理

1. vue会监视data中所有层次的数据。
2. 如何监测对象中的数据
通过setter实现监视,并且要在new Vue时就传入要监测的数据。 
    1).对象中后追加的属性,Vue默认不做响应式处理; 
    2).如需后添加属性做响应式,则使用如下: 
    Vue.set(target,propertyName/index,value) 或者 
    Vue.$set(target,propertyName/index,value)
    
3. 如何监测数组中的数据
通过包裹数组更新元素的方法实现,本质就是做了两件事: 
1).调用原生对应的方法催数组进行更新。
2).重新解析模板,进而更新页面。
4. 在Vue修改数组中的某个元素一定要用如下方法:
1).使用这些API:push()、pop()、shift()、unshift()、splice()、reverse()
2).Vue.set() 或 Vue.$set()
注意点:

Vue.set()和Vue.$set() 不能给 vm 或者 vm的根数据对象添加属性!!!

后续逐渐更新。。。。