持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情juejin.cn/post/714765…
侦听器
计算属性允许我们声明性的计算衍生值,然后在有些情况下,我们需要在状态变化时执行一些副作用,例如更改DOM,或是根据异步操作的结果去修改另一处的状态。
在选项式API中,我们可以使用watch选项在每次响应式属性发生变化时触发一个函数。:
watch选项也支持把键设置成.分隔的路径:
深层侦听器
watch默认是浅层的:被侦听的属性,仅在被赋新值时,才会触发回调函数——而嵌套属性的变化不会触发。如果想侦听所有嵌套的变更,你需要深层侦听器。
deep:true
注意:深度侦听需要遍历被侦听对象中的所有嵌套的属性,当用于大型数据结构时,开销很大。因此请只在必要时使用它,并且要留意性能。
即时回调的侦听器
watch默认是懒执行的,仅当数据源变化时,才会执行回调。但在某些场景中,我们希望在创建侦听器时,立即执行一遍回调。举例来说,我们想请求一些初始数据,然后再相关状态更改时重新请求数据。
我们可以用一个对象来声明侦听器,这个对象有handler方法和immediate:true选项,这样便能强制回调函数立即执行。
回调的触发时机
当你更改了响应式状态,他可能会同时触发vue组件更新和侦听器回调。默认情况下,用户创建的侦听器回调,都会在vue组件更新之前被调用。这意味着你在侦听器回调中访问的DOM将是被vue更新之前的状态。
如果想在侦听器回调中能访问被vue更新之后的DOM ,你需要指明flush:"post"选项:
handler(){}里面默认访问更新之前的DOM,如果想在更新完成之后在调用的话用flush:“”
this.$watch () 动态来创建侦听
我们也可以使用组件实例的$watch()方法来命令地创建一个侦听器:
如果要在特定条件下设置一个侦听器,或者只侦听响应用户交互的内容,这方法很有用,它还允许你提前停止该侦听器。
停止侦听器
用watch选项或者watch()API返回的函数: