vuex状态管理使用记录二

48 篇文章 0 订阅

store设置如下:

主要文件是modules中的文件,以及index.js文件。

其中:index.js文件代码如下:

import Vue from 'vue'
import Vuex from 'vuex'
import modules from './modules'

Vue.use(Vuex)
const store = new Vuex.Store({modules})

export default store

modules中index.js代码如下

import account from './account'
import setting from './setting'
import config from './config'
export default {account, setting , config}

modules中account.js代码如下

import {login, logout, getPerssions} from '@/api/account'
import { ACCESS_TOKEN } from '@/store/mutation-types'
export default {
  namespaced: true,
  state: {
    user: undefined,
    permissions: null,
    roles: null,
    routesConfig: null,
    token:null
  },
  getters: {
    user: state => {
      if (!state.user) {
        try {
          const user = localStorage.getItem(process.env.VUE_APP_USER_KEY)
          state.user = JSON.parse(user)
        } catch (e) {
          console.error(e)
        }
      }
      return state.user
    },
    permissions: state => {
      if (!state.permissions) {
        try {
          const permissions = localStorage.getItem(process.env.VUE_APP_PERMISSIONS_KEY)
          state.permissions = JSON.parse(permissions)
          state.permissions = state.permissions ? state.permissions : []
        } catch (e) {
          console.error(e.message)
        }
      }
      return state.permissions
    },
   ...
  },
  mutations: {
    setUser (state, user) {
      state.user = user
      localStorage.setItem(process.env.VUE_APP_USER_KEY, JSON.stringify(user))
    },
    setPermissions(state, permissions) {
      state.permissions = permissions
      localStorage.setItem(process.env.VUE_APP_PERMISSIONS_KEY, JSON.stringify(permissions))
    },
   
  },
  actions:{
  // 登录
  Login ({ commit }, userInfo) {
    return new Promise((resolve, reject) => {
      login(userInfo).then(response => {
        const {data,msg,status} = response
        if(status==0){
          var user={name : (data.realname ? data.realname:data.username)}
          commit('setUser',user)
           getPerssions().then(permissionData=>{
             if(permissionData && permissionData.data && permissionData.status ==0){
              commit('setPermissions',permissionData.data)
             }
           })

           resolve(response)
        }else{
          reject(new Error(response))
        }
      }).catch(error => {
        reject(error)
      })
    })
  },
   ...
  }
}

同样在main.js中引用和挂载

import store from './store'
new Vue({
  router,
  store,
    ...
  render: h => h(App),
}).$mount('#app')

在使用的时候注意:

import {mapActions} from 'vuex' 
import { mapGetters } from 'vuex'

export default {

 data() {
    return {
      name:this.$store.state.account.user.name
    };
  },
  computed: {
    ...mapGetters('account',['user']),
   }
   methods: {
      ...mapActions('account',['Login']),
     toLogin(){
        ...
         this.Login(postdata).then(res=>{
            ...
          }).catch(error=>{
            ...
          })
    }
        ...
}

使用时,可以像如上代码:

this.$store.state.account.user.name

也可以使用结算数据中的值user

<input v-model="user.name"/>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值