• vuex store 分模块化


    store分模块代码如下所示:

    代码结构下图所示

    //  user.js 模块
    
    const user = {
        state: {
            demo: '我是XX用户'
        },
    
        //同步 this.$store.commit('方法名'); 来调用
        mutations: {
            setDemo(state, value) {
                state.demo = value + " 触发demo";
            },
            setDemo1(state, value) {
                state.demo = value + " 触发demo1";
            }
        },
        //异步 this.$store.dispatch('方法名'); 来调用
        actions: {
            //this.$store.dispatch('setName');
            setName(content) {
                console.log("走这里了setName")
                content.commit('setDemo', "");
            },
            // 这里使用了异步
            setName1(content, value) {
                console.log("走这里了setName1")
                content.commit('setDemo1', value);
            }
        }
    };
    export default user;
    //  getters.js
     const getters = { demo: state => state.user.demo } export default getters;
    //  index.js

    import Vue from 'vue' import Vuex from 'vuex' import getters from './getters' Vue.use(Vuex) //module文件夹下太多文件,导入太麻烦,使用context实现模块化导入 const modulesFiles = require.context('./modules', true, /\.js$/) const modules = modulesFiles.keys().reduce((modules, modulePath) => { const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1') const value = modulesFiles(modulePath) modules[moduleName] = value.default return modules }, {}) const store = new Vuex.Store({ modules, getters }) export default store
    // main.js中引入
    
    import App from './App.vue'
    
    import Vue from 'vue'
    Vue.config.productionTip = false
    App.mpType = 'app'
    import store from './store/index'  // 引入
    //把vuex定义成全局组件
    Vue.prototype.$store = store    // 挂载
    const app = new Vue({
        ...App,
        store   // 挂载
    })
    app.$mount()
    // 页面测试用例代码

    <template> <viw> <view class="content">sotre 测试</view> <view>{{ this.$store.state.user.demo }}</view> <button @click="test" style=" 90%;">点我【commit提交】</button> <button @click="test2" style=" 90%;margin-top: 30px;">点我【dispatch提交】</button> </viw> </template> <script> import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'; export default { data() { return { title: 'Hello' }; }, computed: mapState(['user']), // 这里是引用user模块 mounted() { console.log(this.$store.getters.demo); console.log('我是doemo2:' + this.$store.state.user.demo); }, onLoad() {}, methods: { ...mapMutations(['setDemo']), ...mapActions(['setName']), test() { this.$store.commit('setDemo', '大王加我来巡山-01'); }, test2() { //this.$store.dispatch('setName'); this.$store.dispatch('setName1', '大王加我来巡山-02'); } } }; </script>
  • 相关阅读:
    最火的.NET开源项目[转]
    ExtJs4.1目录结构介绍和使用说明[转]
    mvc4 Forms验证存储 两种登录代码
    微服务 第九章 springboot 使用NoSql数据库:redis
    【数据挖掘】关联分析之Apriori(转载)
    C语言面试
    10.15习题2
    java 执行linux命令
    servlet tomcat eclipse
    002_监测ssl证书过期时间
  • 原文地址:https://www.cnblogs.com/louby/p/16186759.html
Copyright © 2020-2023  润新知