Vue 两个简易代替 vuex 的方法

当我们做一些小项目,没必要用到vuex的时候,但是又要用类似vuex的功能,这个时候就可以用eventBus或者observable

eventBus

声明一个全局Vue实例变量 eventBus , 把所有的通信数据,事件监听都存储到这个变量上

  • main.js
Vue.prototype.$eventBus = new Vue()
  • parent.vue
methods: {
  click() {
    this.$eventBus.$emit('eventBus', '哈哈哈')
  }
}
  • children.vue
mounted:{
  this.$eventBus.$on('eventBus', val => {
    console.log('eventBus', val)
  })
}

有时候我们遇到的页签组件的时候,多次点击页签会频繁的触发 eventBus 事件,这时候子组件接收事件的时候,需要先取消事件:

mounted:{
  this.$eventBus.$off('eventBus').$on('eventBus', val => {
    console.log('eventBus', val)
  })
}

注: vue3 使用的是 mitt

observable

Vue 内部会用它来处理 data 函数返回的对象; 返回的对象可以直接用于渲染函数和计算属性内,并且会在发生改变时触发相应的更新

  • store.js
import Vue from 'vue'

export const store = Vue.observable({ count: 0 })
export const mutations = {
  setCount(count) {
    store.count = count
  }
}
  • test.vue
<template>
  <div>
    <span>{{ count }}</span>
    <button @click="setCount">按钮</button>
  </div>
</template>

<script>
import  { store, mutations } from 'xxx/store.js'

computed: {
  count() {
    return store.count
  }
},
methods: {
  setCount() {
    mutations.setCount(this.count + 1)
  }
}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值