千家信息网

Vue.js怎么实现监听

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇"Vue.js怎么实现监听"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Vue.
千家信息网最后更新 2026年11月03日Vue.js怎么实现监听

这篇"Vue.js怎么实现监听"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Vue.js怎么实现监听"文章吧。

demo:

{{ message }}

set: function reactiveSetter(newVal) { var value = getter ? getter.call(obj) : val; if (newVal === value) { return; } if (setter) { setter.call(obj, newVal); } else { val = newVal; } childOb = observe(newVal); dep.notify();}

这段代码出现在解析data属性的时候,即调用Object.defineProperty方法配置data的属性。一旦属性发生变化,就notify发送广播。

Dep.prototype.notify = function () { // stablize the subscriber list first var subs = toArray(this.subs); for (var i = 0, l = subs.length; i < l; i++) { subs[i].update(); }};

notify 最终是周知subscribe(订阅者)更新,那么上面的数据变更就是发布者。 subscribe是Watcher这个类的实例化对象,在实例化的时候,会传入回调函数来执行update,vue弄了一个队列来执行watcher的更新函数,具体可参考源码。

Watcher.prototype.run = function () { …… if (value !== this.value || (isObject(value) || this.deep) && !this.shallow) { …… } else { this.cb.call(this.vm, value, oldValue); } } this.queued = this.shallow = false; } };

在Directive(指令)class中实例化了Watcher,_update函数负责来更新

var watcher = this._watcher = new Watcher(this.vm, this.expression, this._update, // callback { filters: this.filters, twoWay: this.twoWay, deep: this.deep, preProcess: preProcess, postProcess: postProcess, scope: this._scope });

在解析模板的时候会解析Directive,然后绑定,实例化watcher,这样模板-data就关联在一起了。

图片描述

观察者模式

林林总总的mvc或者mvvm框架基本也都是利用了观察者模式,这个也非常有用,尤其在复杂的系统之中。

利用观察者模式,在典型的ajax应用中,回调的处理逻辑可以不跟请求耦合在一块,这样逻辑上也会更加清晰。如下是一个简单的发布/订阅模式的实现

var PubSub = {};(function (q) { var topics = {}, subUid = -1; q.publish = function (topic) { if(!topics[topic]){  return false; } var subscribers = topics[topic],  len = subscribers ? subscribers.length : 0; while(len--){  var args = Array.prototype.slice.call(arguments, 1);  args.unshift(topic);  subscribers[len].callback.apply(this, args); } return this; }; q.subscribe = function (topic, callback) { if(!topics[topic]){  topics[topic] = []; } var subuid = (++subUid).toString(); topics[topic].push({  token: subuid,  callback: callback }); return subuid; }; q.unsubscribe = function (subid) { for(var k in topics){  if(topics[k]){  for(var i = 0, j = topics[k].length; i < j; i++){   if(topics[k][i].token === subid){   topics[k].splice(i, 1);   return subid;   }  }  } } return this; };})(PubSub);

这就是一个简单的订阅发布系统,每注册一个订阅者,其实就是将其回调处理的callback保存在一个字典对象的数组中,字典对象的key值可以随意定义,只要与发布时的key对应起来就好。

怎么使用呢?

最后一个将不会打印出来,因为已经取消订阅了。

以上就是关于"Vue.js怎么实现监听"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

内容 订阅 实例 就是 模式 监听 函数 对象 属性 时候 观察者 更新 观察 字典 文章 模板 知识 篇文章 系统 订阅者 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 亿人帮互联网科技有限公司 深圳九邦互联网科技有限公司 互联网科技产业 互联网科技会 互联网最新的科技有限公司 深圳天众互联网科技公司 互联网科技网站 人人互联网科技是培训 互联网金融监管科技 开启互联网科技时代小说 移动互联网科技股 荆州市昕露互联网络科技有限公司 杭州壁岐互联网科技有限公司 伊宁互联网科技做什么的 领航科技大厦互联网公司 上海创道互联网络科技有限公司 宁波跨境商互联网科技有限公司 全球科技与互联网公司市值变化 现代科技的标志之一的互联网 山东特亿宝互联网科技有限公司 科技类互联网 撒么互联网科技公司 卓越科技互联网 招聘 注册互联网科技公司经营范围大全 银川新华互联网科技学校联系电话 城市宝互联网科技有限公司 35岁以上互联网科技行业 济南小医互联网科技有限公司招聘 互联网科技手抄报图片
0