vuex 动态注册方法 registerModule的实现


Posted in Javascript onJuly 03, 2019

Vuex(2.3.0+)可以用store.registerModule方法在进入路由时进行注册,离开路由时候销毁 actions, mutations, getters, state,在一定范围内相同名称不会被覆写

例子

index.js

传this 的写法

module.exports = {
  install(_this) {
    _this.$store.registerModule(['abc'], {
      namespaced: true,
      state: {
        rightTest: 999
      },
      actions: {
        setTest: ({commit}, val) => {
          commit('putTest', val)
        }
      },
      mutations: {
        putTest: (state, val) => {
          state.rightTest = val;
        }
      }
    })
  },
  uninstall(_this) {
    _this.$store.unregisterModule(['abc'])
  }
};

不传this,有写 store 的写法

import store from '../../store';

export default {
  install() {
    store.registerModule(['abc'], {
      namespaced: true,
      state: {
        rightTest: 999
      },
      actions: {
        setTest: ({commit}, val) => {
          commit('putTest', val)
        }
      },
      mutations: {
        putTest: (state, val) => {
          state.rightTest = val;
        }
      }
    })
  },
  uninstall() {
    store.unregisterModule(['abc'])
  }
}

调用方法时应该在创建完实例之后的钩子中,未创建实例调用会找不到 store。

在install、uninstall时,传递this过去,可以在上面中直接调用。

dispath 时,如果设置了命名空间,则一定要加上,我这个因为没使用较复杂的命名,注册时的名字就在命名空间那用了。

test.vue

import abc from '../../store/test';
...
created() {
  // 挂载对应的 store
  abc.install(this);
  console.log(this.$store, 'install');
},
destroyed() {
  // 销毁对应的 store
  abc.uninstall(this);
  console.info(this.$store, 'uninstall');
},
methods: {
 test(){
  this.$store.dispatch('abc/setTest', Math.random());
 }

总结

当范围内使用动态方法注册 actions 时还是比较爽的,而且在destroyed 钩子中销毁可以节省一部分资源;

配置命名空间也可以避免覆盖问题,算是多一种手段吧(感觉还是应用在多模块,全局注册时用到这个);

当没有父子关系时,但还需要多页面共享状态,可以用动态注册就不太方便了;
(我好像还是没解决全局注册时方法过多的问题。。。)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JAVASCRIPT对象及属性
Feb 13 Javascript
通过百度地图获取公交线路的站点坐标的js代码
May 11 Javascript
JS比较两个时间大小的简单示例代码
Dec 20 Javascript
javascript实现淘宝幻灯片广告展示效果
Apr 27 Javascript
js改变Iframe中Src的方法
May 05 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
Mar 29 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
Jul 22 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
Jul 09 Javascript
JavaScript 自定义事件之我见
Sep 25 Javascript
浅谈Node异步编程的机制
Oct 18 Javascript
Angular PWA使用的Demo示例
Jan 31 Javascript
ionic+html5+API实现双击返回键退出应用
Sep 17 Javascript
微信小程序中如何使用flyio封装网络请求
Jul 03 #Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 #jQuery
使用vue实现各类弹出框组件
Jul 03 #Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
Jul 03 #Javascript
使用微信SDK自定义分享的方法
Jul 03 #Javascript
微信小程序判断页面是否从其他页面返回的实例代码
Jul 03 #Javascript
8 个有用的JS技巧(推荐)
Jul 03 #Javascript
You might like
php分页示例代码
2007/03/19 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
微信小程序错误this.setData报错及解决过程
2019/09/18 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python群发邮件实例代码
2014/01/03 Python
python开发之str.format()用法实例分析
2016/02/22 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
python实现接口并发测试脚本
2019/06/25 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
结构和类有什么异同
2012/07/16 面试题
行政总监岗位职责
2013/12/05 职场文书
电钳专业个人求职信
2014/01/04 职场文书
关爱老人标语
2014/06/21 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
靠谱准确的求职信
2019/04/02 职场文书
美元符号 $
2022/02/17 杂记