美文网首页
从0开始探究vue-公共变量的管理

从0开始探究vue-公共变量的管理

作者: IT_梅 | 来源:发表于2020-03-01 15:18 被阅读0次

背景

Vue项目中,我们总会遇到一些公共数据的处理,如方法拦截,全局变量等,本文旨在解决这些问题

解决方案

事件总线

所谓事件总线,就是在当前的Vue实例之外,再创建一个Vue实例来专门进行变量传递,事件处理,管理回调事件等

//main.js中
Vue.prototype.$bus = new Vue();
new Vue({...})

//页面一
this.$bus.$on('sayName',(e)=>{
    alert('我的名字是',e)
})

//页面二
this.$bus.$emit('sayName','小明');//我的名字是 小明

原型挂载

所谓原型挂载,就是在main.js中将公共变量,事件,都挂在到Vue原型上

//main.js
Vue.prototype.$globalData = {}
Vue.prototype.$sayName = function(e){
    console.log('我的名字是',e)
}
new Vue({...})

//组件一
Vue.prototype.$globalData.name='小明';
this.$sayName('小王');//我的名字是小王

//组件二
console.log(this.$sayName.name);//小明
this.$sayName('小王');//我的名字是小王

vuex

VuexVue提供的一种,专门用来管理vue中的公共状态,事件等等,以应用登录为例

//新建store.js
import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
Vue.use(Vuex)
export default new Vuex.Store({
  state: {//此处为公共变量
    userId:"",//用户Id
    loginSession:""//用户登录凭证
  },
  mutations: {//此处为同步方法
    setLoginSession(state,loginSession){//存入state中的用户凭证
        state.loginSession = loginSession;
    },
    setUserId(state,loginSession){//存入state中的用户凭证
        state.loginSession = 'user_'+Math.floor(Math.random()*100000000000);
    }
  },
  actions: {//此处为异步方法
    getUserId({state,commit},options={}){//从服务器取登录凭证,然后返回是否登录状态
        return new Proise((resolve)=>{//返回一个promise对象,来让调用者可以使用.then来进行下一步操作
            axios.get('api').then((res)=>{
                commit('setLoginSession',res.data.loginSession)
                resolve(this.getters.isLogin)
            })
        }))
    }
  },
  modules: {//此处为混入更多的vuex小模块
    
  },
  gatters: {//此处为计算变量
      isLogin(){
          return (this.userId&&this.loginSession)?true:false
      }
  }
})
//main.js中注入vuex
import store from './store/store.js'
Vue.prototype.$store = store;

//app.vue中
export default {
    data(){
        return {}
    },
    mounted(){
        this.$store.commit('setUserId');//设置用户Id
        this.$store.dispatch('getUserId').then((result)=>{//查询登录凭证,并返回登录结果
            console.log(this.$store.getters.isLogin,result);//true  true  此处也可以查看计算属性中的是否登录状态
            if(result){
                alert('登录了')
            }else{
                alert('未登录')
            }
        });
    }
}

相关文章

  • 从0开始探究vue-公共变量的管理

    背景 在Vue项目中,我们总会遇到一些公共数据的处理,如方法拦截,全局变量等,本文旨在解决这些问题 解决方案 事件...

  • 从0开始探究vue-双向绑定原理

    理解 vue是一个非常优秀的框架,其优秀的双向绑定原理,mvvm模型,组件,路由解析器等,非常的灵活方便,也使开发...

  • 从0开始探究vue-组件化-组件之间传值

    理解 Vue中有个非常重要的核心思想,就是组件化,组件化是为了代码复用 什么是组件化 组件化,就像一个电脑主机里的...

  • clean code读书笔记(三)

    一、类 类从变量开始,公共静态常量-->私有静态变量-->私有实体变量,公共函数应跟在变量列表之后。 类要短小,职...

  • 从0开始探究blcok底层

    关于这方面的内容其实满天飞,但每篇都几乎是一样子的,可能大多数人都觉得自己讲的特别清楚,但是其实很多内容都让读者觉...

  • iOS底层探索32、内存管理

    本文开始对内存管理进行探究分析。 一、内存布局 内存布局图中,高地址0xc0000000,针对4G的内存,0xc0...

  • Jinja2循环计数内置变量

    变量内容loop.index循环迭代计数(从1开始)loop.index0循环迭代计数(从0开始)loop.rev...

  • 复习VUE.JS第五天

    bower->(前端) 包管理器 vue->过渡(动画)

  • Java—Remove Deplicates from Sort

    题目 思路 定义index变量覆盖新数组的索引,从0开始; 遍历数组,索引i从1开始,如果arr[index] !...

  • SelectSort

    发自简书外层循环用循环变量out,从数组开头开始(数组下标为0)向高位增长。内层循环用循环变量in,从out所指位...

网友评论

      本文标题:从0开始探究vue-公共变量的管理

      本文链接:https://www.haomeiwen.com/subject/fufckhtx.html