vue

在非实例化时,增加属性

set( )方法

Vue.set(增加的对象,'属性名key','属性值')

vm.$set(增加的对象,'属性名key','属性值')

增加的对象:vm._data.name/vm.name(写道代码里的vm就变成this)

注意:只能改变data的对象的属性,直接改变data的某个直接对象是不行的

数组

使用七大api会对数组的变更操作会触发视图更新,而普通的赋值添加属性的操作是不会有视图更新的

在对于属性是直接处于数组,如【’学习‘】或者【id:'123',name:'aa'】(这个同样不行),直接采用数组的下标,进行更改数值是不会有视图更新的

是因为数组的非对象内容,其下标是没有对应的get和set方法的,于是也就没有了视图更新

watch和computed

watch

注意

监视某个对象的属性就用"对象.属性"定义
监视整一个对象(深度监视)
使用deep:true
  • 其中一个属性变化了就能监视到
    而不是这个对象内容变了才能监视到

配置方法

实例化时
handler
  • 参数
  * oldValue


  * newValue
  • 在初始化调用handler
  * 配置中写immediate:true
vm.$watch('监视对象名字',配置对象)

vue可以检测对象内部的改变,但vue提供的watch默认不可以,根据数据的结构,采取是否选用深度监视deep

computed

差异

computed能实现的,watch都能实现

watch能完成异步操作,computed不能

因为computed靠的是返回值,异步操作的返回值不一定能保证返回回去

所有异步函数(定时器、promise、ajax),为了能获取到vue管理的内容,如data,最好写成箭头函数

一些名词解释

数据代理

就是通过get和set的方式将数据之间有了关系,以便于互相修改互相更新

代理也好、劫持也好,原理都是用Object.defineproperty

数据劫持

也就是set、get

数据监视

watch

其中还有深度监视

视图更新

牵扯到模板解析、虚拟dom生成,新旧虚拟dom对比、真实dom

v-model

修饰符

lazy

失去焦点时

number

只能输入数字

trim

去掉两边的空格

生命周期

生命周期里的this都是vm