ajax php 观察者模式,JavaScript观察者模式定义和dom事件实例详解

本文探讨了JavaScript中如何使用观察者模式(发布-订阅模式),通过DOM事件实现异步编程的通知机制,以及如何在实际场景中,如网站模块间通过事件触发简化登录信息的传递。通过例子展示了如何利用事件模型轻松解耦不同模块之间的硬编码通知关系。
摘要由CSDN通过智能技术生成

观察者模式(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。

在JavaScript中,一般使用事件模型来替代传统的观察者模式。

好处:

(1)可广泛应用于异步编程中,是一种替代传递回调函数的方案。

(2)可取代对象之间硬编码的通知机制,一个对象不用再显示地调用另外一个对象的某个接口。两对象轻松解耦。

DOM事件–观察者模式典例

需要监控用户点击document.body的动作,但是我们没有办法预知用户将在什么时间点击。

所以,我们订阅document.body上的click事件,当body节点被点击时,body节点便向订阅者发布这个消息!

document.body.addEventListener("click", function() {

console.log(1);

}, false);

// 可以多个订阅者

document.body.addEventListener("click", function() {

console.log(2);

}, false);

doucment.body.click();

某网站有header头部、nav导航、消息列表等模块。这几个模块的渲染都需要获取用户登陆信息。

(1)一般写法:

$.ajax({

url: './login',

type: 'post',

contentType: 'application/json',

dataType:'json',

success: function(data) {

if(data.status === "success") {

// 登录成功,渲染header、nav

header.setInfo(data.headerInfo);

nav.setInfo(data.navInfo);

}

}

});

(2)使用观察者模式,很轻松解耦!

$.ajax({

...,

success: function(data) {

if(data.status === "success") {

// 登录成功,发布登陆成功消息

login.trigger("loginsuccess", data);

}

}

});

var header = (function() {

// 监听消息

login.listen("loginsuccess", function(data){

header.setInfo(data.headerInfo);

});

return {

setInfo: function(data) {

console.log("设置header信息");

}

};

})();

var nav = (function() {

login.listen("loginsuccess", function(data){

nav.setInfo(data.navInfo);

});

return {

setInfo: function(data) {

console.log("设置nav信息");

}

}

})();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值