当前位置:首页 > VUE

vue watch实现

2026-03-27 22:16:45VUE

监听数据变化的基本用法

在 Vue 中,watch 用于监听数据变化并执行相应操作。通过定义一个 watch 对象,可以指定要监听的属性及其处理函数。

export default {
  data() {
    return {
      message: 'Hello'
    }
  },
  watch: {
    message(newVal, oldVal) {
      console.log('Message changed from', oldVal, 'to', newVal)
    }
  }
}

深度监听对象或数组

当需要监听对象内部属性或数组元素变化时,使用 deep 选项。这会使监听器递归观察所有嵌套值的变化。

watch: {
  someObject: {
    handler(newVal, oldVal) {
      // 处理变化
    },
    deep: true
  }
}

立即触发监听回调

使用 immediate 选项可以在监听开始时立即执行一次回调函数,而不是等待数据首次变化。

watch: {
  someProp: {
    handler(newVal) {
      // 初始调用
    },
    immediate: true
  }
}

监听计算属性

可以直接监听计算属性的变化,就像监听普通数据属性一样。

computed: {
  computedMsg() {
    return this.message + ' World'
  }
},
watch: {
  computedMsg(newVal) {
    console.log('Computed message changed:', newVal)
  }
}

使用 $watch API

除了选项式 API,还可以在组件实例上使用 $watch 方法动态添加监听器。这种方式返回一个取消监听的函数。

export default {
  created() {
    this.unwatch = this.$watch('message', (newVal, oldVal) => {
      console.log('Message changed:', newVal)
    })
  },
  beforeDestroy() {
    this.unwatch() // 取消监听
  }
}

监听路由变化

在 Vue Router 应用中,可以监听 $route 对象的变化来响应路由切换。

watch: {
  '$route'(to, from) {
    // 处理路由变化
    console.log('Navigated from', from.path, 'to', to.path)
  }
}

监听多个数据源

通过将多个属性名放在数组中,可以同时监听多个数据源的变化。

watch: {
  ['prop1', 'prop2'](newValues, oldValues) {
    const [newProp1, newProp2] = newValues
    const [oldProp1, oldProp2] = oldValues
    // 处理变化
  }
}

性能优化技巧

对于频繁变化的数据,可以使用 debouncethrottle 限制回调执行频率。这需要借助 Lodash 等工具库实现。

vue watch实现

import { debounce } from 'lodash'

watch: {
  searchQuery: debounce(function(newVal) {
    this.fetchResults(newVal)
  }, 500)
}

标签: vuewatch
分享给朋友:

相关文章

vue实现访问量

vue实现访问量

Vue 实现访问量统计的方法 使用前端计数 在 Vue 中可以通过简单的计数器实现页面访问量的统计。这种方法适合小型项目或演示用途。 // 在 Vue 组件中 data() { return {…

vue按钮实现截屏

vue按钮实现截屏

Vue 按钮实现截屏的方法 在 Vue 项目中实现截屏功能可以通过多种方式完成,以下是几种常见的方法: 使用 html2canvas 库 安装 html2canvas 库: npm ins…

vue 实现菜单

vue 实现菜单

Vue 实现菜单的方法 使用 Vue 实现菜单可以通过多种方式,以下是几种常见的方法: 使用 Vue Router 实现动态路由菜单 通过 Vue Router 可以动态生成菜单,根据路由配置自动渲…

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过drag…

vue 实现搜索

vue 实现搜索

实现 Vue 搜索功能 在 Vue 中实现搜索功能通常涉及以下几个关键步骤: 数据绑定与输入监听 使用 v-model 双向绑定搜索输入框的值,监听用户输入: <template>…