当前位置:首页 > 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 选项可以在监听开始时立即执行一次回调函数,而不是等待数据首次变化。

vue watch实现

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 方法动态添加监听器。这种方式返回一个取消监听的函数。

vue 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 等工具库实现。

import { debounce } from 'lodash'

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

标签: vuewatch
分享给朋友:

相关文章

vue实现 toast

vue实现 toast

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

vue实现路径

vue实现路径

Vue 实现路径的方法 在 Vue 中实现路径管理通常涉及 Vue Router 的使用,以下是一些常见的实现方法: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Route…

vue实现选人

vue实现选人

实现选人功能的基本思路 在Vue中实现选人功能通常涉及以下核心环节:数据绑定、用户交互处理、状态管理以及界面渲染。以下是具体实现方法: 数据准备与组件结构 创建包含人员信息的数组,通常从API获取或…

vue 实现平面

vue 实现平面

Vue 实现平面的方法 在 Vue 中实现平面效果通常涉及 CSS 样式、UI 框架或自定义组件的使用。以下是几种常见方法: 使用 CSS 样式 通过 Vue 的样式绑定或 scoped CSS 为…

vue实现settimeout

vue实现settimeout

在 Vue 中实现 setTimeout Vue 中可以通过 JavaScript 原生的 setTimeout 方法实现延时操作,但需要注意结合 Vue 的响应式特性和生命周期管理。以下是几种常见实…

laravel vue实现登录

laravel vue实现登录

Laravel 和 Vue.js 实现登录功能 后端配置(Laravel) 安装 Laravel Sanctum 用于 API 认证 composer require laravel/sanctu…