对象的监听
vue通过object.defineProperty将对象的key转化成getter/setter的形式来追踪变化,但是这种追踪方式只能追踪到数据的修改,对象的属性的删除和增加,这种形式追踪不到。为此vue提供可
s
e
t
和
set 和
set和delete两种API来配合使用,解决监听不到属性新增删除问题。
需要特别注意,在使用
s
e
t
时
,
需
要
传
递
的
参
数
有
三
个
v
m
.
set时,需要传递的参数有三个 vm.
set时,需要传递的参数有三个vm.set(target,key,value),target不能是Vue.js实例或者vue.js实例的根数据对象,所谓的根数据对象是指vm.
d
a
t
a
∗
∗
在
使
用
data * *在使用
data∗∗在使用delete时候,也可以中另外一种方法实现,但是不太推荐:
delete this.obj.name;
this.obg.ob.dep.notify //手动向依赖发送变化通知;
(说明: ob 是 vue中是否是响应式的判断依据)
在使用$delete时候,target不能是Vue.js实例或者vue.js实例的根数据对象,
数组的监听
vue通过拦截数组原型的方式实现数组的变化的监听,所以有些不是数组原型定义的方法进行的数组操作,发生的变化,是数组感知不到的,比如通过数组下标修改对应位置的值(this.list[0] = 2),或者通过数组长度改变数组(比如通过数组length清空数组的操作: this.list.length = 0 )。
所以进行数组操作的时候,尽量使用数组原型方法操作:
push pop unshift shift concat reverse sort slice splice join