当前位置:首页 > 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 // 深度监听
  }
}

监听多个数据源

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

vue实现监听

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)
    }
  }
}

计算属性监听

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

vue实现监听

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,它们提供了更强大的状态监听能力。

// 使用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组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…

vue实现类别

vue实现类别

Vue 实现类别的几种方法 在 Vue 中实现类别功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-bind:class 动态绑定类名 通过对象语法或数组语法动态绑定类名,根据条件添加或移…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…

vue监听实现

vue监听实现

Vue 监听实现方法 在 Vue 中可以通过多种方式实现监听数据变化或事件触发,以下是常见的几种方法: 使用 watch 选项 watch 是 Vue 提供的核心功能之一,用于观察和响应 Vue 实…

vue 实现长按

vue 实现长按

实现长按功能的基本思路 在Vue中实现长按功能,通常需要监听元素的mousedown或touchstart事件,启动一个计时器。当用户按住元素超过设定的时间阈值时,触发长按回调函数。如果在时间阈值内触…

vue实现增删

vue实现增删

Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是基于 Vue 2 或 Vue 3 的实现方法: 数据定义 初始化一个数组用于存储列表数据,并在 Vue 实…