zoukankan      html  css  js  c++  java
  • 在登陆退出时候使用Vuex

    1.登陆的时候,在登陆模块请求接口,然后获取一个access_token,获取用户权限.保存到缓存里面。

    2.退出的时候,请求退出接口,把缓存里面的access_token清除。

    一旦要在登陆里面做一些行为,比如,在后面新加一些数据传递给登陆接口,做数据收集。就要在登陆的Login.vue模块

    里面直接修改。模块里面的代码很多。所有的逻辑都混在一起。

    所以可以把登陆和退出的变量和行为抽离出来,在状态管理里统一管理。

    const store = new Vuex.Store({
      state: {
        count: 0
      },
      mutations: {
        increment (state) {
          state.count++
        }
      }
    })
    

      

    把退出,登陆的模块都封装在一个状态模块上面

    const moduleA = {
      state: { ... },
      mutations: { ... },
      actions: { ... },
      getters: { ... }
    }
    
    const moduleB = {
      state: { ... },
      mutations: { ... },
      actions: { ... }
    }
    
    const store = new Vuex.Store({
      modules: {
        a: moduleA,
        b: moduleB
      }
    })
    
    store.state.a // -> moduleA 的状态
    store.state.b // -> moduleB 的状态
    

      

    对用户权限判断是否可以进入某个页面的时候,统一在路由钩子里进行执行。

    比如 登陆进首页,需要判断用户权限,从别的页面进首页,仍然要判断用户权限。

    如果页面进入分别写在登陆页面,和别的页面,代码就不好维护,都在vue路由的导航守卫里面进行处理

    登陆异步代码 ,和login模块里面的回调。

    state状态管理里面, mutations是立即执行的,actions 可以是异步的,所以用actions。

    import Vue from 'vue'
    import Vuex from 'vuex'
    Vue.use(Vuex);
    
    const loginSet = {
        state: {
            access_token: null
        },
        mutations: {
             setAccessToken(state, param){
                 state.access_token = param.value;
             }
        },
        actions: {
            loginAsync({ commit }){
                return new Promise((resolve, reject)=>{
                    setTimeout(()=> {
                        commit({
                            type: 'setAccessToken',
                            value: 'ajshdksjjsd' //我随便写了几个值
                        });
                        resolve();
                    }, 1000)
                });
            }
        },
        getters: {
    
        }
    };
    
    
    const store = new Vuex.Store({
        modules: {
            login: loginSet
        }
    })
    
    export {store};  

    登陆模块的调用,异步回调

    this.$store.dispatch('loginAsync').then(()=>{
               //如果登陆成功了以后,回调
               console.log(this.$store.state.login.access_token);
               this.$router.push('首页');
     });
    

      

  • 相关阅读:
    Vue学习笔记-2
    versionCompare 版本号比较工具
    Vue学习笔记-1
    工作机会
    PAT题目AC汇总(待补全)
    sqli-labs-master 第二关+第三关+第四关
    sqli-labs-master 盲注+第五关+第六关
    Java面向对象--equeal和==
    Java面向对象--object
    Java面向对象--成员变量的初始值
  • 原文地址:https://www.cnblogs.com/chenyi4/p/11387682.html
Copyright © 2011-2022 走看看