深入响应式原理

Vue的响应式系统基于数据劫持和依赖收集,当修改数据时,视图会自动更新。文章详细介绍了如何通过Vue.set方法为嵌套对象添加响应式属性,并指出Vue无法检测到对象属性的新增或删除。同时,它不支持在实例创建后添加新的根级响应式属性。

Vue 最显著的特性之一是响应式系统(reativity system)。

模型层(model)只是普通的JavaScript 对象,修改它则更新视图(view)。

每个组件实例都有相应的watcher 实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的setter 被调用时,会通知watcher 重新计算,从而致使它关联的组件得以更新。

注:Vue 不支持IE8 以及更低版本浏览器

变化检测问题

Vue 不能检测到对象属性和添加或删除。

由于Vue 会在初始化实例时对属性执行getter/setter 转化过程,所以属性必须在data 对象上存在才能让Vue 转化它。这样才能让它是相应的。

 1     <script>
 2         var vm= new Vue({
 3             data:{
 4                 a:1
 5             }
 6         })
 7         // vm.a 是响应的
 8         vm.b=2
 9         //vm.b 是非相应的
10     </script>

Vue 不允许在已创建的实例上动态添加新的根级响应式属性(root-level reactive property)。

然而使用Vue.set(object, key, value) 方法将相应属性添加到嵌套对象上。

1       var vm=new Vue({
2           el:'#example',
3           data:{
4               a:'b',
5               b:[1,'b',3,4]
6           }
7       })
8       Vue.set(vm.b,1,10)
9       vm.$set(vm.b,5,11)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值