当前位置:首页 > VUE

vue监听实现

2026-01-07 22:53:24VUE

Vue 监听实现方法

在 Vue 中可以通过多种方式实现监听数据变化或事件触发,以下是常见的几种方法:

使用 watch 选项

watch 是 Vue 提供的核心功能之一,用于观察和响应 Vue 实例上的数据变动。

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

使用 $watch API

可以通过 this.$watch 在组件实例中动态添加监听器。

export default {
  created() {
    this.$watch('message', (newVal, oldVal) => {
      console.log('Message changed from', oldVal, 'to', newVal)
    })
  }
}

使用计算属性

计算属性 (computed) 会根据依赖自动更新,适合需要基于其他数据计算值的场景。

vue监听实现

export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName() {
      return this.firstName + ' ' + this.lastName
    }
  }
}

监听 DOM 事件

可以通过 v-on 指令或 @ 简写监听 DOM 事件。

<template>
  <button @click="handleClick">Click me</button>
</template>

<script>
export default {
  methods: {
    handleClick() {
      console.log('Button clicked')
    }
  }
}
</script>

使用事件总线

对于非父子组件间的通信,可以创建事件总线。

// event-bus.js
import Vue from 'vue'
export const EventBus = new Vue()

// Component A
EventBus.$emit('event-name', payload)

// Component B
EventBus.$on('event-name', payload => {
  console.log('Event received', payload)
})

使用 Vuex

在大型应用中,Vuex 提供集中式状态管理,可以监听 store 的变化。

vue监听实现

// store.js
export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  }
})

// Component
export default {
  computed: {
    count() {
      return this.$store.state.count
    }
  },
  watch: {
    count(newVal) {
      console.log('Count changed to', newVal)
    }
  }
}

监听路由变化

可以使用 watch 监听 $route 对象的变化。

export default {
  watch: {
    '$route'(to, from) {
      console.log('Route changed from', from.path, 'to', to.path)
    }
  }
}

深度监听对象

对于对象或数组,需要深度监听才能捕获嵌套属性的变化。

export default {
  data() {
    return {
      user: {
        name: 'Alice',
        age: 25
      }
    }
  },
  watch: {
    user: {
      handler(newVal) {
        console.log('User changed', newVal)
      },
      deep: true
    }
  }
}

立即触发监听

有时需要在监听时立即执行回调函数。

export default {
  watch: {
    message: {
      handler(newVal) {
        console.log('Message is', newVal)
      },
      immediate: true
    }
  }
}

每种监听方法适用于不同的场景,选择合适的方法可以提高代码的可维护性和性能。

标签: vue
分享给朋友:

相关文章

vue 实现手册

vue 实现手册

以下是关于 Vue.js 实现手册的整理内容,涵盖核心概念、实践方法和常见场景的解决方案: 核心概念与基础用法 Vue.js 是一个渐进式 JavaScript 框架,核心特点包括数据驱动视图和组件…

vue实现评论编辑

vue实现评论编辑

Vue 实现评论编辑功能 数据绑定与表单结构 使用 v-model 双向绑定评论内容到表单输入框,确保编辑时能显示原内容并同步修改。示例模板结构: <template> <d…

vue实现tab标签

vue实现tab标签

Vue 实现 Tab 标签的方法 使用动态组件和 v-for 渲染标签 通过 v-for 循环生成标签页标题,结合 v-bind:class 动态切换激活状态。使用 v-show 或动态组件 <…

vue实现选择分类

vue实现选择分类

Vue 实现选择分类的方法 使用 v-model 绑定选择值 在 Vue 中可以通过 v-model 指令实现双向数据绑定,适用于下拉选择框(<select>)。以下是一个基本示例: &…

vue实现组件循环

vue实现组件循环

Vue 组件循环的实现方法 在 Vue 中实现组件循环通常使用 v-for 指令,可以循环渲染数组或对象的数据到组件上。 基本数组循环 通过 v-for 指令遍历数组,渲染多个相同结构的组件。…

vue实现多选联动

vue实现多选联动

vue实现多选联动的方法 使用v-model绑定数组 在Vue中,可以通过v-model绑定一个数组来实现多选联动。当复选框被选中或取消选中时,数组会自动更新。 <template>…