当前位置:首页 > VUE

vue订阅者实现

2026-01-17 23:02:44VUE

Vue 订阅者模式实现

在 Vue 中实现订阅者模式通常通过自定义事件或 Vuex 状态管理完成。以下是几种常见方法:

自定义事件(Event Bus)

创建一个全局事件总线作为中介:

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

组件订阅事件:

import { EventBus } from './eventBus'
EventBus.$on('event-name', (payload) => {
  console.log('Received:', payload)
})

发布事件:

EventBus.$emit('event-name', { data: 'example' })

Vuex 状态管理

通过 Vuex 的 store 实现状态订阅:

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

组件订阅状态变化:

this.$store.subscribe((mutation, state) => {
  if (mutation.type === 'increment') {
    console.log('Count changed:', state.count)
  }
})

watch 监听器

直接监听响应式数据变化:

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

第三方库(如 mitt)

使用轻量级事件库:

vue订阅者实现

import mitt from 'mitt'
const emitter = mitt()

// 订阅
emitter.on('event', (data) => console.log(data))

// 发布
emitter.emit('event', { key: 'value' })

注意事项

  • 事件总线需在组件销毁时移除监听器避免内存泄漏:
    EventBus.$off('event-name')
  • Vuex 更适合大型应用的状态管理,小型项目可使用事件总线
  • 深层对象监听需要指定 deep: true 参数

选择方法时应根据项目规模和复杂度决定,简单组件通信可用自定义事件,跨组件状态管理推荐 Vuex。

标签: vue
分享给朋友:

相关文章

vue实现选区

vue实现选区

Vue 实现选区的基本方法 在Vue中实现选区功能通常涉及DOM操作和事件处理。以下是几种常见的方法: 使用原生JavaScript的Selection API 通过window.getSelec…

vue评分实现

vue评分实现

Vue 评分组件实现方法 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 引入并注册组件: import Vue from '…

vue实现handsontable

vue实现handsontable

Vue 中实现 Handsontable 要在 Vue 项目中集成 Handsontable,可以使用官方提供的 @handsontable/vue 封装库。以下是一个完整的实现步骤。 安装依赖 确…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue实现等级选择

vue实现等级选择

实现等级选择的方法 在Vue中实现等级选择功能,可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for渲染星级选择 通过v-for指令循环渲染星级图标,结合点击事件实现等级选择:…