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 相关文章推荐
JS数组去重与取重的示例代码
Jan 24 Javascript
详解JavaScript中的事件流和事件处理程序
May 20 Javascript
jQuery多文件异步上传带进度条实例代码
Aug 16 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
Dec 08 Javascript
基于js实现二级下拉联动
Dec 17 Javascript
详解如何用webpack打包一个网站应用项目
Jul 12 Javascript
Vue渲染函数详解
Sep 15 Javascript
详解开发react应用最好用的脚手架 create-react-app
Apr 24 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
Aug 11 Javascript
layui表格数据复选框回显设置方法
Sep 13 Javascript
vue项目初始化到登录login页面的示例
Oct 31 Javascript
JS实现简单的九宫格抽奖
Jun 28 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验证码函数的使用示例
2013/05/03 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
使用Python生成XML的方法实例
2017/03/21 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
学生会竞选演讲稿
2014/04/24 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
安全教育第一课观后感
2015/06/17 职场文书
机械生产实习心得体会
2016/01/22 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
java泛型通配符详解
2021/07/25 Java/Android
python flappy bird小游戏分步实现流程
2022/02/15 Python
Java设计模式中的命令模式
2022/04/28 Java/Android
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技