vue检测数据的原理

直接给数组中的元素赋值,vue不做响应式,但是直接给数组元素中的对象中的属性赋值是可以的(因为已经有了set,get);直接给对象中新添加的属性赋值(因为没有set,get),也是不可以的

检测对象的原理:通过se() 检测,对象中的属性发生变化,就会重新解析模板,生成虚拟dom,对比真实的dom...

 vue中提供的set  api,可以响应式的增加对象中的属性,语法为:Vue.set(vm._data.student , 'sex', '男')   在vm下:vm.$set(vm.student , 'sex', '男')

 vue.set 的局限:avoid adding reactive properties to a vue instance or its root(避免向vue实例vm或其根_data添加响应式属性),不能直接给data 中添加一个属性,只能给data中的某一个对象追加属性

检测数组的原理(包装):使用数组中的方法(操作后更改了原来的数据)即可

vue 检测到数组使用的方法之后,将被侦听数组的方法进行包裹,会将视图进行更新:1.调用array下的数组方法;2. 重新解析模板,生成虚拟dom...  具体包裹的方法有:push,pop,shift,unshift,splice,sort,reverse 语法:vm.student.hobby.push('liuyu'); 注意:可以用filter,虽然无法改变原数组,但是可以将修改后的数据,直接赋值给原数组。

vue.set 也可以更新数组,语法;Vue.set(vm._data.student.hobby, 索引值,'更改的 项')或者vm.$set(同上)

【复习】splice(删除,添加,替换) 函数的参数:第一个参数:替换的位置;第二个参数:删除的个数;第三个参数:替换任意数量的项;

 vue检测数据的原理_第1张图片

 数据劫持:进行包装,将静态数据data 变成响应式,数据劫持和数据代理都离不开 Object.defineProperty

你可能感兴趣的:(同态科技,vue.js,前端,javascript)