当前位置:首页 > VUE

vue实现watch

2026-01-13 06:44:02VUE

在 Vue 中实现 watch 的方法

Vue 的 watch 用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式:

基本用法

通过选项式 API 的 watch 属性监听数据变化:

export default {
  data() {
    return {
      message: 'Hello'
    }
  },
  watch: {
    message(newVal, oldVal) {
      console.log('消息变化:', oldVal, '->', newVal)
    }
  }
}

监听对象属性

使用点语法或字符串路径监听嵌套属性:

vue实现watch

watch: {
  'user.name'(newVal) {
    console.log('用户名变化:', newVal)
  }
}

深度监听

添加 deep: true 监听对象内部所有属性变化:

watch: {
  user: {
    handler(newVal) {
      console.log('用户对象变化:', newVal)
    },
    deep: true
  }
}

立即触发

设置 immediate: true 使回调在监听开始时立即执行:

vue实现watch

watch: {
  value: {
    handler(newVal) {
      console.log('初始值:', newVal)
    },
    immediate: true
  }
}

组合式 API 用法

setup() 中使用 watch 函数:

import { ref, watch } from 'vue'

export default {
  setup() {
    const count = ref(0)

    watch(count, (newVal, oldVal) => {
      console.log('计数变化:', oldVal, '->', newVal)
    })

    return { count }
  }
}

监听多个源

传入数组同时监听多个响应式数据:

watch([foo, bar], ([newFoo, newBar], [oldFoo, oldBar]) => {
  console.log('foo或bar变化:', newFoo, newBar)
})

停止监听

watch 返回停止函数,可在需要时取消监听:

const stop = watch(source, callback)
// 调用停止函数
stop()

注意事项

  • 避免在监听器中修改被监听的数据,可能导致无限循环
  • 深度监听对性能影响较大,应仅在必要时使用
  • 对于复杂逻辑,考虑使用计算属性替代监听器

标签: vuewatch
分享给朋友:

相关文章

vue实现多级弹窗

vue实现多级弹窗

Vue 多级弹窗实现方法 方法一:使用动态组件与递归组件 在 Vue 中可以通过动态组件配合递归组件实现多级弹窗。定义一个基础弹窗组件,通过递归调用自身实现层级嵌套。 基础弹窗组件模板示例: &…

vue实现定位

vue实现定位

Vue 中实现定位的方法 在 Vue 中实现定位可以通过以下几种方式: 使用 CSS 定位 通过 CSS 的 position 属性实现定位,Vue 中可以直接在组件的 <style>…

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…

vue实现Siri

vue实现Siri

Vue 实现 Siri 风格语音交互 实现类似 Siri 的语音交互功能需要结合语音识别、语音合成和前端交互逻辑。Vue 作为前端框架,可以很好地管理这些功能的交互状态。 语音识别集成 使用 Web…

vue实现筛选

vue实现筛选

实现筛选功能的基本思路 在Vue中实现筛选功能通常需要结合数据绑定、计算属性和方法。筛选的核心逻辑是根据用户输入的条件过滤原始数据列表,并动态更新显示结果。 数据准备 定义一个数组存储原始数据,另一…