当前位置:首页 > VUE

vue实现监听

2026-01-07 22:17:19VUE

监听数据变化

在Vue中,可以通过watch选项或$watch方法监听数据的变化。watch适用于组件选项内声明式监听,$watch适用于动态监听。

// 选项式API
export default {
  data() {
    return {
      message: 'Hello'
    }
  },
  watch: {
    message(newVal, oldVal) {
      console.log('Message changed:', oldVal, '->', newVal)
    }
  }
}
// 组合式API
import { ref, watch } from 'vue'

const message = ref('Hello')
watch(message, (newVal, oldVal) => {
  console.log('Message changed:', oldVal, '->', newVal)
})

监听对象属性

监听对象属性需要使用深度监听或指定具体路径。Vue默认不深度监听对象内部变化。

watch: {
  'user.name': {
    handler(newVal, oldVal) {
      console.log('Name changed:', oldVal, '->', newVal)
    },
    immediate: true // 立即触发
  },
  user: {
    handler(newVal) {
      console.log('User object changed:', newVal)
    },
    deep: true // 深度监听
  }
}

监听多个数据源

使用数组可以同时监听多个响应式数据源,回调参数也会是数组形式。

watch([firstName, lastName], ([newFirst, newLast], [oldFirst, oldLast]) => {
  console.log('Names changed:', oldFirst, oldLast, '->', newFirst, newLast)
})

监听路由变化

通过watch可以监听$route对象的变化,常用于路由参数变化时的数据更新。

watch: {
  '$route'(to, from) {
    if (to.params.id !== from.params.id) {
      this.fetchData(to.params.id)
    }
  }
}

计算属性监听

计算属性会自动追踪依赖,当依赖变化时会重新计算。适合派生状态的监听。

computed: {
  fullName() {
    return this.firstName + ' ' + this.lastName
  }
}

事件监听

组件可以通过$on方法监听自定义事件,或使用v-on指令监听DOM事件。

<template>
  <button @click="handleClick">Click</button>
  <child-component @custom-event="handleCustomEvent" />
</template>

<script>
methods: {
  handleClick() {
    console.log('Button clicked')
  },
  handleCustomEvent(payload) {
    console.log('Custom event received:', payload)
  }
}
</script>

生命周期钩子监听

Vue提供了一系列生命周期钩子,可以监听组件不同阶段的状态变化。

export default {
  created() {
    console.log('Component created')
  },
  mounted() {
    console.log('Component mounted')
  },
  updated() {
    console.log('Component updated')
  },
  destroyed() {
    console.log('Component destroyed')
  }
}

第三方库集成

对于复杂状态管理,可以集成Vuex或Pinia,它们提供了更强大的状态监听能力。

vue实现监听

// 使用Pinia
import { useStore } from '@/stores/counter'
import { storeToRefs } from 'pinia'

const store = useStore()
const { count } = storeToRefs(store)

watch(count, (newVal) => {
  console.log('Count changed:', newVal)
})

标签: vue
分享给朋友:

相关文章

vue实现列表显示

vue实现列表显示

Vue 实现列表显示的方法 在 Vue 中实现列表显示通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式。 基本列表渲染 通过 v-for 指令遍历数组,动态生成列…

vue 实现toast

vue 实现toast

vue 实现 toast 的方法 在 Vue 中实现 Toast 提示功能可以通过多种方式,以下是几种常见的实现方法: 使用第三方库 Vue 生态中有许多成熟的 Toast 库,例如 vue-toa…

vue怎么实现

vue怎么实现

Vue 实现方法 Vue 是一个流行的前端框架,用于构建用户界面。以下是几种常见的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。 <input v-m…

vue实现粘贴

vue实现粘贴

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

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

vue 实现轮播

vue 实现轮播

Vue 实现轮播的方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template>…