这篇文章主要介绍了如何在vue怎么中使用发布订阅模式,小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随小编来看看吧!
vue是什么软件
vue是一套用于构建用户界面的渐进式JavaScript框架,vue与其它大型框架的区别是,使用vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用vue可以采用单文件组件和vue生态系统支持的库开发复杂的单页应用。
var 观察={ fnsObj才能:{},//,才能订阅方法 :函数才能(关键、fn) { ,,,如果(! observe.fnsObj[主要]){ ,,,,,observe.fnsObj(例子),=,[] ,,,} ,,,observe.fnsObj(例子).push (fn) ,,},//,才能发布 emmit才能:函数(键值){ ,,,如果(observe.fnsObj[主要]. length) { ,,,,,var fnsList =, observe.fnsObj(例子) ,,,,,,(var 我=0;i好吧,那我们来尝试来调用下
//,我们订阅了两个监听者 observe.on(& # 39;说# 39;,函数(e) { console.log(& # 39;小姐:还要hear 他说,& # 39;+ e) }) observe.on(& # 39;说# 39;,函数(e) { console.log(& # 39;他说,& # 39;+ e) })接着发布消息
//,发布消息 observe.emmit (“say",“嘿,这里是发布者“)可以看见控制台返回了两条消息,就是刚才我们定义的订阅者里打印出的内容
我能听到他说:这里是发布者
,他说:这里是发布者
这就是发布订阅模式,我相信很多人概念都知道,但是至于在项目中如何实际运用,这又是个大问题。
毕竟设计模式感觉不是很常用,而且即使不用设计模式,也能实现需求,所以下面我着重介绍下,我在vue中碰到的一个需求中是如何使用发布订阅模式。
<>强实际运用强>
<强> 1,需求介绍强>
我这个项目是公司内部的人力资源管理系统。因此需要根据对不同权限进行菜单获取,还有一些下拉框数据,以及一些基础信息,需要在登陆后就马上获取,在调用接口后获取数据后,把它存储在vuex里面
目前这几个方法是写在应用。vue里面
//,获取基本数据 ,this.loadMenu () ,this.loadBasicData () 之前,this.loadUserInfo () >所以我要考虑到两种情况
只有登陆后才能拉取这些数据
当前页面刷新,如果为登陆后则需要重新拉取数据,否则不进行任何操作
<强> 1,常规解决方案强>
这个算是比较普遍的需求,类似的很常见,按照常规解决方法,可以这么做:
在mixin里面把这些方法放在里面
登陆成功后存一个状态到sessionStorage里面,同时调用这些方法拉取数据
app.vue里面创建的生命周期里判断sessionStorage里的状态是否为登陆,如登陆则拉取数据
好的,需求解决,但是问题是,万一这些方法是只能放在app.vue里面呢,比如这个项目,应用。vue不是我写的。是另外一个前端写,他不愿意把这些方法放在mixin呢?如果我们能够监sessionStorage听的变化就可以了。但是无论是看还是计算都没办法监sessionStorage听的变化,
<强>所以这时候我们可以尝试使用,发布订阅模式强>
1,创建一个观察。js
class Observe { ,构造函数(){ this.fnsObj 才能=,{} ,} ,,//,订阅方法 ,在(关键,fn), { if 才能;(! this.fnsObj[主要]),{,this.fnsObj(例子),=,[],} this.fnsObj才能(例子).push (fn) ,}//,,,发布 ,emmit(键,值),{ if 才能;(this.fnsObj[主要]. length), { ,,var fns =, this.fnsObj(例子) ,,for (let 小姐:=,0;,小姐:& lt;, fns.length;,我+ +),{ ,,,fn(我)打电话给(这个,,值) ,,} ,,} ,} ,,//删除订阅者 ,删除(关键){ for 才能;(var k  this.fnsObj拷贝),{ ,,if (k ===,键),{ ,,,delete (this.fnsObj [k]) ,,} ,,} ,} } const observeSession =, new 观察() export default  observeSession2,在应用程序。vue将他引入,同时定义监听和发布者
import observeSession 得到& # 39;效用。//观察# 39; … 创建(){//刷才能新后如果为登陆状态则获取数据 ,,sessionStorage.getItem(& # 39;登录# 39;),===,& # 39;登录# 39;,,,,this.loadSelectVal ()//才能定义全局方法,在调用window.setSessionStorage的时候,发布者发布信息 ,,window.setSessionStorage =,(键,值),=祝辞,{ ,,,observeSession.emmit (& # 39; watchSesStore& # 39;,,{关键的不同之处是,value }) ,,} ,//监听存储在sessionStorage登陆状态变化,如果为登陆状态则获取数据,监听者监听信息 ,,observeSession.on (& # 39; watchSesStore& # 39;,, e =祝辞,{ ,,,sessionStorage.setItem (e.key, e.value) ,,,e.value ===, & # 39;登录# 39;,,this.loadSelectVal () ,,}) }如何在vue怎么中使用发布订阅模式