You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:40:32