Vue

Vuex-命名空间

2020-09-20  本文已影响0人  hello_web_Front

主要记录一下加了namespaced:true的时候,如何访问module里面的数据

user.js

export default {
    namespaced:true,
    state:{
        username:'张三1'
    },
    mutations:{
        setUsername(state,name){
            console.log(name)
        }
    },
    getters:{
        usernameDesc(state){
            return '当前用户的姓名是'+state.username
        }
    },
    actions:{
        AsyncSetUsername({commit,state}){
            setInterval(()=>{
                commit('setUsername','user')
            },2000)
        }
    }
}

cart.js

export default {
    namespaced:true,
    state:{
        cart:'129'
    },
    mutations:{
        setUsername(state,name){
            console.log(name)
        }
    },
    getters:{
        cartDesc(state){
            return '商品的价格是'+state.cart
        }
    },
    actions:{
        AsyncSetUsername({commit,state}){
            setInterval(()=>{
                commit('setUsername','cart')
            },2000)
        }
    }
}

store.js

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);
import user from './user/user.js'
import cart from './cart/cart.js'
import test from './test/test.js'
export default new Vuex.Store({
    modules:{
        user,
        cart,test
    }
})

1. 访问state

state没有什么变化 在访问的时候和没加上namespaced一样,加上模块的名字即可

...mapState({
                username(state) {
                    return state.user.username
                },
                cart(state){
                    return state.cart.cart;
                }
            })

2. 访问mutations

使用辅助函数的时候,第一个是方法的别名,如果moduleA和muduleB中名字一样 可以起别名,不然的话建议和module里面的名称一致,第二个参数则是命名空间的名字也就是模块名/模块下对应的方法名

# 引入        
            ...mapMutations({
                setUsername:'user/setUsername',
                setUsername1:"cart/setUsername"
            })
# 使用 注意我这个是在uniapp上进行测试的 vue的话 这里是mounted/created/beforeMount都可
onLoad() {  
            // mutations
            this.setUsername('我是module/user'); //我是module/use user.js:8
            this.setUsername1('我是module/cart') //我是module/cart cart.js:8            
        }

3. 访问getters

getters和actions的访问其实和mutations的访问方式是一样的

            ...mapGetters({
                cartDesc:'cart/cartDesc',
                usernameDesc:'user/usernameDesc'
            })


          // getters
            console.log(this.cartDesc)
            console.log(this.usernameDesc)

4.访问actions

            # 这里同名了 就需要进行一个起别名
            ...mapActions({
                AsyncSetUsername:'user/AsyncSetUsername',
                AsyncSetUsername1:"cart/AsyncSetUsername"
            })
            // actions
            this.AsyncSetUsername();
            this.AsyncSetUsername1();
            
上一篇 下一篇

猜你喜欢

热点阅读