vuex与eventbus

 是什么

 vuex是专门为vue.js开发的状态管理模式

它解决的多个组件依赖同一个状态的情况,适用于在单页面中,跨组件状态管理,登录状态管理,购物车管理等等

相对而言结构比较复杂,对于简单页面没必要使用 

 

eventBus又称事件总线,他使用的事订阅发布模式,一般于vue的prototype上注册一个事件中心,用于接收事件已经发送事件,以便全局使用

但是他又有一个比较严重的问题,维护困难,因为他没有明确可维护的列表,完全是定义了什么,才能用什么,一旦不是原开发者维护(甚至原开发者)会一团乱麻

 

 怎么用

 vuex包含了五个属性

1.state,数据存储,也就是vuex中状态管理中的状态

2.getters,可以理解为vuex中的计算属性,可以对sate进行简单的运算后返回,并且实时监听数据的状态,在多模块的vuex结构中也经常用于直接获取对应模块的值

3.mutations,数据操作,也就是vuex状态管理的的管理,所有直接操作state的方法都在这里,所有变更state的方式都必须经过mutations,触发执行mutations的方法是commit的方法

4.actions,异步操作,mutaions一般用于直接操作state,而actions则是在异步请求获取数据后执行commit修改state的值,触发actions的方法是dispath

5.modules,模块,当数据量大的时候,仅仅使用一张表也一样不好管理,因此出现了模块化

   要注意,模块内部基本与外部结构一致,但不同的地方有,

   1)namespace属性,这会让他成为带命名的空间模块,模块内容不的state,getters,mutation,actions都会自动注册模块路径,当他为false时,module的内容与根目录的内容就等于根目录上的内容

   2)mutations和actions的函数的参数多了context.rootState,context.rootGetters访问根目录数据

   3)dispatch,commit可以传递第三个参数为{root:true},在根目录开始触发,

dispatch('vip/get', data, {root: true}) 

 

   4)mutations和actions想在具名模块里注册全局action

 

      actions: {
        someAction: {
          root: true,
          handler (namespacedContext, payload) { ... } // -> 'someAction'
        }
      }

 

 

 6,modules是可以在store创建之后追加上去

import Vuex from 'vuex'

const store = new Vuex.Store({ /* 选项 */ })

// 注册模块 `myModule`
store.registerModule('myModule', {
  // ...
})
// 注册嵌套模块 `nested/myModule`
store.registerModule(['nested', 'myModule'], {
  // ...
})

 

 

 

 

 

eventBus的使用方法

import Vue from 'vue'
Vue.prototype.$EventBus = new Vue()

//订阅
this.$EventBus.$on('xxx',(text)=>{
    console.log(text)
})

//发布
this.$EventBus.$emit('xxx',666)

 

posted @ 2021-08-31 15:37  来吃点代码  阅读(959)  评论(0编辑  收藏  举报