Vue源码分析--vm.$watch()

本文深入分析Vue框架中vm.$watch()的实现原理,探讨它可以是getter函数或表达式,并详细说明其在数据变化时如何触发回调。当watcher是方法时,根据返回值决定是否执行回调。同时,讲解了如何通过immediate参数实现立即执行及deep选项监控对象内所有属性。
摘要由CSDN通过智能技术生成

Vue源码分析–vm.$watch()

vm.$watch()核心是调用Watcher,如果你对Watcher的使用不熟悉的话,建议先看我的这篇文章 Vue另类解读–基于数据劫持的双向绑定Observer/Watcher/Dep

vm.$watch( expOrFn, callback, [options] )

先说总结

  • expOrFn 可以是一个string, 也可以是一个 function
  • 如果expOrFn的依赖发生了变化,会重新获取expOrFn这个值,或是重新执行这个方法
  • expOrFn 当它是一个string时,可以是$data,$attrs这种被Observer的属性,或是computed这种被特殊处理的复合属性。这个string也可以是一个a.b.c的形式,代表this.a.b.c
  • expOrFn 当它是一个方法时,分两种情况。
    • 有返回值,可以看做前面的这种特殊字段的getter
    • 没返回值,依赖数据变化时,只会重新执行一次这个方法,而不会触发之后的callback回调,例:Vue自身的页面渲染方法就是通过这种方式监控的
  • callback 回调,当依赖属性被重新赋值时,重新获取表达式expOrFn的值,如果发生了变化,执行回调cb.call(vm, value, oldValue)
  • options.deep,如果expOrFn指向了data上的一个对象,可以通过设置options.deep = true<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值