Vue.js监听器中flush:post的含义、代码作用及示例请求
Vue.js中watch选项的
flush: 'post'详解 一、flush: 'post'是什么?
Vue的watch监听器默认flush值为'pre',意味着监听器的回调函数(handler)会在DOM更新前执行。而设置flush: 'post'后,回调函数会延迟到DOM更新完成后再触发,确保你在handler里能直接获取到更新后的DOM状态。
二、你提供的代码作用
这段代码为响应式属性key注册了一个监听器:
- 当
key的值发生变化时,会触发handler函数执行 - 由于设置了
flush: 'post',handler会等待Vue完成DOM更新后才运行,保证你在函数里能拿到最新的DOM内容
三、实际示例
下面是一个直观的示例,可对比flush不同值的差异:
<template> <div> <input v-model="username" placeholder="输入用户名" /> <p ref="nameDisplay">{{ username }}</p> </div> </template> <script> export default { data() { return { username: '' } }, watch: { // 带flush: 'post'的监听器 username: { handler(newVal) { // DOM已更新,能拿到最新的文本内容 console.log('post模式下的DOM内容:', this.$refs.nameDisplay.textContent) console.log('新值:', newVal) // 两者输出完全一致 }, flush: 'post' }, // 默认pre模式的监听器(可取消注释对比差异) // username(newVal) { // // DOM还未更新,拿到的是旧内容 // console.log('pre模式下的DOM内容:', this.$refs.nameDisplay.textContent) // console.log('新值:', newVal) // // 两者输出不一致 // } } } </script>
当你在输入框中输入内容时,post模式的监听器会在<p>标签的文本更新后再执行,所以打印的DOM内容和新值完全匹配;如果用默认的pre模式,打印的DOM内容还是更新前的旧值。
内容的提问来源于stack exchange,提问作者dato
相关产品推荐
相关产品推荐

