当前位置:首页 > VUE

vue watch实现

2026-01-13 05:04:09VUE

使用 watch 监听数据变化

在 Vue 中,watch 用于监听数据的变化并执行相应的回调函数。通过 watch 可以监听响应式数据的变化,包括 datacomputedprops 中的数据。

export default {
  data() {
    return {
      message: 'Hello Vue',
      count: 0
    }
  },
  watch: {
    // 监听 message 的变化
    message(newVal, oldVal) {
      console.log('message changed:', oldVal, '->', newVal)
    },
    // 监听 count 的变化
    count(newVal, oldVal) {
      console.log('count changed:', oldVal, '->', newVal)
    }
  }
}

监听对象或数组的深层变化

默认情况下,watch 是浅层的,不会监听对象或数组内部属性的变化。如果需要监听深层变化,可以设置 deep: true

export default {
  data() {
    return {
      user: {
        name: 'Alice',
        age: 25
      }
    }
  },
  watch: {
    user: {
      handler(newVal, oldVal) {
        console.log('user changed:', oldVal, '->', newVal)
      },
      deep: true // 监听深层变化
    }
  }
}

立即触发监听回调

如果需要监听器在初始化时立即执行一次回调,可以设置 immediate: true

export default {
  data() {
    return {
      message: 'Hello Vue'
    }
  },
  watch: {
    message: {
      handler(newVal, oldVal) {
        console.log('message changed:', oldVal, '->', newVal)
      },
      immediate: true // 初始化时立即执行
    }
  }
}

监听动态属性

如果需要监听动态变化的属性(如 props 中的动态值),可以使用函数返回监听的目标。

vue watch实现

export default {
  props: ['userId'],
  watch: {
    // 监听 userId 的变化
    userId(newVal, oldVal) {
      console.log('userId changed:', oldVal, '->', newVal)
    }
  }
}

使用 $watch 动态监听

除了在 watch 选项中定义监听器,还可以通过 this.$watch 动态添加监听器,并可以手动取消监听。

export default {
  data() {
    return {
      message: 'Hello Vue'
    }
  },
  created() {
    // 动态添加监听器
    const unwatch = this.$watch('message', (newVal, oldVal) => {
      console.log('message changed:', oldVal, '->', newVal)
    })

    // 取消监听
    setTimeout(() => {
      unwatch()
    }, 5000)
  }
}

监听计算属性

watch 也可以监听 computed 计算属性的变化。

vue watch实现

export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName() {
      return `${this.firstName} ${this.lastName}`
    }
  },
  watch: {
    fullName(newVal, oldVal) {
      console.log('fullName changed:', oldVal, '->', newVal)
    }
  }
}

监听多个数据源

如果需要同时监听多个数据源的变化,可以使用数组形式传入多个监听目标。

export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  watch: {
    // 监听 firstName 和 lastName 的变化
    '[firstName, lastName]'(newVals, oldVals) {
      console.log('firstName or lastName changed:', oldVals, '->', newVals)
    }
  }
}

结合 watchmethods

可以在 watch 中调用 methods 中的方法,实现更复杂的逻辑。

export default {
  data() {
    return {
      searchQuery: ''
    }
  },
  methods: {
    fetchData(query) {
      console.log('Fetching data for:', query)
    }
  },
  watch: {
    searchQuery(newVal) {
      this.fetchData(newVal)
    }
  }
}

使用 watchEffect(Vue 3)

在 Vue 3 中,可以使用 watchEffect 自动追踪依赖并执行回调。

import { watchEffect, ref } from 'vue'

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

    watchEffect(() => {
      console.log('count changed:', count.value)
    })

    return { count }
  }
}

以上方法涵盖了 Vue 中 watch 的基本和高级用法,适用于不同场景下的数据监听需求。

标签: vuewatch
分享给朋友:

相关文章

eventbus vue实现

eventbus vue实现

EventBus 实现原理 EventBus 是一种发布/订阅模式,用于 Vue 组件间的通信。核心是通过一个中央事件总线管理事件监听和触发。 创建 EventBus 在 Vue 项目中创建一个独立…

vue能实现

vue能实现

Vue.js 是一个流行的前端框架,能够实现多种功能。以下是 Vue 能够实现的主要功能和特性: 响应式数据绑定 Vue 的核心特性之一是响应式数据绑定。通过数据驱动视图,当数据发生变化时,视图会自…

vue实现影院

vue实现影院

Vue实现影院功能的基本思路 使用Vue框架开发影院功能需要结合前端组件化开发、状态管理以及后端API交互。以下是关键实现步骤: 影院页面布局设计 影院页面通常分为顶部导航栏、影院列表区域和底部导航…

vue实现选人

vue实现选人

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

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注册…

vue拼图实现

vue拼图实现

实现 Vue 拼图游戏的方法 使用 Vue 组件和动态数据绑定 创建一个 Vue 组件来管理拼图的状态和逻辑。通过 v-for 动态渲染拼图块,利用 v-bind 绑定样式和位置。拼图块的数据可以存储…