Vue发布-订阅者模式

更新时间:2023-06-22 18:37:29 阅读: 评论:0

Vue发布-订阅者模式
1、vue响应原理:
vue.js采⽤数据劫持结合发布-订阅者模式,通过Object.defineProperty()来劫持data中各个属性的tter、getter,在数据变动时,发布消息给订阅者,触发响应的监听回调。
(tter和getter是对象的存储器属性,是⼀个函数,⽤来获取和设置值)
2、发布-订阅者模式的作⽤:
处理⼀对多的场景,应⽤于不同情况下的不同函数调⽤
优点:低耦合性,易于代码维护;
缺点:若订阅的消息未发⽣,需消耗⼀定的时间和内存。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta chart="UTF-8">
<title>Vue发布-订阅模式</title>
braintear</head>
<body>
<div id="app">
订阅试图-1:<span class="box-1">第⼀个值</span>
订阅试图-2:<span class="box-2">第⼆个值</span>denpasar
</div>
<script>
//订阅器模型
初中英语语法下载var Dep = {
hini
list: {},ehow
listen: function (key, fn) {
(this.list[key] || (this.list[key] = [])).push(fn);
},
trigger: function () {
var key = Array.prototype.shift.call(arguments);
fns = this.list[key];
if (!fns || fns.length == 0) return;
for (var i = 0, fn; fn = fns[i++];) {
fn.apply(this, arguments);//发布消息附带的参数
}
}
};
//劫持的⽅法 Object.defineProperty⽅法,给对象的属性赋值
var dataHijack = function ({ data, tag, datakey, lector }) {
debugger
var value = '';
临时性
el = document.querySelector(lector);
Object.defineProperty(data, datakey, {
//拿到数据
get: function () {
console.log('我获取到值了');
return value;
},
//设置数据
t: function (newVal) {
console.log('我设置值了');
value = newVal;
}
})
//绑定观察者
Dep.listen(tag, function (text) {
el.innerHTML = text;
})
};
var dataObj = {}; //数据
//数据劫持
会计核算的基本前提有
dataHijack({
data: dataObj,
tag: 'view-1',
datakey: 'one',
lector: '.box-1'
});
dataHijack({
data: dataObj,
tag: 'view-2',
godfatherdatakey: 'two',
lector: '.box-2'
});
</script>
</body>
</html>
// jquery中的发布-订阅者
//创建⼀个事件池 $.Callback()
let $pond= $.Callback();
$('.submit').click(function(){
//发布点击的时候通知事件池中的⽅法执⾏,同时传递实参            $pond.fire(100,200);
});
let fn1=function(){console.log(1)}
let fn2=function(){console.log(2)}
let fn3=function(n,m){console.log(3,n+m)}
//把需要做的事情添加到事件池中
津波//事件池相当于⼀个登记册,把所有订阅者收集到上⾯
$pond.add(fn1);
$pond.add(fn2);
国防科技大学分数线2019
$pond.add(fn3);

本文发布于:2023-06-22 18:37:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1015316.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:发布   订阅   事件   数据   消息   时间   获取
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图