背景

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-公共变量的管理的更多相关文章

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

    理解 Vue中有个非常重要的核心思想,就是组件化,组件化是为了代码复用 什么是组件化 组件化,就像一个电脑主机里的主板,有内存条的插口,有硬盘,光驱等等的插口,我们的项目,就像一个电脑主机,通过各种组 ...

  2. 如何在vue中全局引入stylus文件的公共变量

    新建 一个公共的stylus公共文件添加公共变量,如下: 修改下图圈出的文件: 具体的修改如下: // generate loader string to be used with extract t ...

  3. 随机跳转页面之使用VBA公共变量

    p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...

  4. C# 引用类型公共变量的影响

    public int[] a =new int[2]; private void button1_Click(object sender, EventArgs e) { bing(a); } priv ...

  5. 从0开始搭建vue+webpack脚手架(二)

    接着从0开始搭建vue+webpack脚手架(一) 三.配置webpack-dev-server 1. webpack-dev-server自带一个node的服务器, 项目在服务端运行的同时可以实现热 ...

  6. m_Orchestrate learning system---三十三、公共变量多弄成全局变量

    m_Orchestrate learning system---三十三.公共变量多弄成全局变量 一.总结 一句话总结:比如班级id,小组id,这样省事,而且减少数据库的访问,加快访问速度,而且节约代码 ...

  7. 最齐全的vue公共函数给你们放出来啦

    import Vue from 'vue' /* 配置参数 */Vue.prototype.winH = document.documentElement.clientHeight; Vue.prot ...

  8. less的引用及公共变量的抽离

    一.什么是less? less是什么自然不用多言,乃一个css预编译器,可以扩展css语言,添加功能如如允许变量(variables),混合(mixins),函数(functions) 和许多其他的技 ...

  9. C#-WebForm-★内置对象简介★Request-获取请求对象、Response相应请求对象、Session全局变量(私有)、Cookie全局变量(私有)、Application全局公共变量、ViewState

    内置对象: 1.Request - 获取请求对象 用法:接收传值 protected void Page_Load(object sender, EventArgs e) { TextBox1.Tex ...

随机推荐

  1. 王颖奇 201771010129《面向对象程序设计(java)》第六周学习总结

    实验六 继承定义与使用 实验时间 2018-9-28 1.目的与要求 理论部分: 继承(inheritance): 继承的特点:具有结构层次:子类继承了父类的域和方法. 主要内容: (1)类.子类.超 ...

  2. SpringCloud (一) :微服务架构

    什么是微服务架构 简而言之,微服务架构风格就是将单一应用的开发分为多个小的服务,每个小的服务在自己的进程中运行并使用轻量级机制进行通信(通常是一个HTTP API源),这些服务围绕业务性能进行构建,并 ...

  3. 基于SSM的健身房管理系统

    基于SSM的健身房管理系统 The project was made in 2020-05-05~2020-05-10 谨以此片博文记录下我的第一个Java小Demo 项目展示 用户登录页 用户注册页 ...

  4. Excel:公式转数值

    跨Workbook引用有些危险,有时要把公式转换为数值.修改频繁,有时也要把公式转换为数值. 方法一,选中区域,复制Ctrl+C,选择性粘贴Ctrl+Alt+V,数值V.方法二,选中区域,复制Ctrl ...

  5. 关于jquery样式切换的一些想法

    前一阵子写了一些代码,都是关于一个按钮点击切换状态的按钮,当时没有想周到就用addClass removeClass来控制这个控件的状态,后来想想觉得不妥. <html> <head ...

  6. Python脚本:linux上将筛选的文件夹复制到另一个目录,保存目录结构以及文件和文件夹操作方法

    import os,shutil def newDir(dir_path): if not os.path.exists(dir_path): os.makedirs(dir_path) def co ...

  7. Spring Cloud 系列之 Consul 配置中心

    前面我们已经学习过 Spring Cloud Config 了: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) Spr ...

  8. .NET 程序员的 Playground :LINQPad

    如果想执行一个简单的 C# 语句并获得运行结果,通常我们需要做几个步骤才能达成: 打开 Visual Studio 并新建一个控制台项目. 在 Program.cs 中编写代码并保存. 点击运行按钮或 ...

  9. ketchup 注册中心consul使用

    ketcup  git地址:https://github.com/simple-gr/ketchup consul 安装 1.docker pull consul 2.docker run --nam ...

  10. 原生js获取元素的各种位置(大全)

    加给元素: offsetLeft (距离定位父级的距离) offsetTop (距离定位父级的距离) offsetWidth (可视宽度) offsetHeight (可视高度) clientLeft ...