当前位置:首页 > VUE

vue里怎么实现监听

2026-02-23 11:37:01VUE

Vue 监听实现方法

使用 watch 选项

在 Vue 组件选项中定义 watch 对象,可以监听特定数据的变化。当被监听的数据发生变化时,会触发对应的处理函数。

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

使用 $watch 方法

在组件实例中调用 $watch 方法,可以动态添加监听器。这种方式适用于需要在运行时添加监听的情况。

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

监听对象属性

对于对象的属性变化,需要设置 deep 选项为 true 才能监听到嵌套属性的变化。

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

监听数组变化

Vue 可以监听到数组的变异方法(如 push、pop 等)引起的变化。如果需要监听数组元素的变化,也需要设置 deep 选项。

export default {
  data() {
    return {
      items: [1, 2, 3]
    }
  },
  watch: {
    items: {
      handler(newVal) {
        console.log('Array changed', newVal)
      },
      deep: true
    }
  }
}

立即触发监听

设置 immediate 选项为 true 可以在监听器创建时立即触发回调。

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

计算属性监听

计算属性本身具有缓存特性,只有当依赖的响应式属性变化时才会重新计算。可以替代简单的监听场景。

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

生命周期钩子监听

在某些生命周期钩子中可以直接访问数据变化,例如 updated 钩子会在组件更新后触发。

export default {
  updated() {
    console.log('Component updated')
  }
}

事件总线监听

对于跨组件通信,可以使用事件总线模式来监听和触发自定义事件。

// eventBus.js
import Vue from 'vue'
export const EventBus = new Vue()

// Component A
EventBus.$on('custom-event', (data) => {
  console.log('Event received:', data)
})

// Component B
EventBus.$emit('custom-event', { message: 'Hello' })

Vuex 状态监听

当使用 Vuex 管理状态时,可以通过 watch 选项或 store.subscribe 方法来监听状态变化。

// 组件内监听
export default {
  computed: {
    count() {
      return this.$store.state.count
    }
  },
  watch: {
    count(newVal) {
      console.log('Count changed:', newVal)
    }
  }
}

// 全局监听
store.subscribe((mutation, state) => {
  console.log('Mutation:', mutation.type)
  console.log('State:', state)
})

vue里怎么实现监听

标签: vue
分享给朋友:

相关文章

vue实现a

vue实现a

Vue 实现 A 功能的方法 在 Vue 中实现 A 功能可以通过多种方式,具体取决于 A 功能的具体需求。以下是几种常见的实现方法: 使用 Vue 组件 通过创建自定义组件来实现 A 功能。组件可…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…

vue实现导入

vue实现导入

Vue 实现文件导入功能 使用 <input type="file"> 元素 在 Vue 模板中添加一个文件输入元素,绑定 change 事件处理函数。 <template>…

vue jwt实现

vue jwt实现

Vue JWT 实现方法 安装依赖 确保项目中安装了 jsonwebtoken(后端)和 axios(前端)。若使用 Vue 3,可搭配 vue-router 和 pinia(或 vuex)管理状态。…

vue实现tabs

vue实现tabs

Vue实现Tabs组件的方法 使用动态组件和v-for指令 在Vue中创建Tabs组件可以通过动态组件和v-for指令实现。定义一个包含tab标题和内容的数组,使用v-for渲染tab标题,并通过点击…

vue实现列表

vue实现列表

Vue 实现列表的方法 在 Vue 中实现列表渲染通常使用 v-for 指令,可以动态生成多个元素。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 遍历数组,生成列表项。v-for 需要…