手撕Vue-监听数据变化

经过上一篇的介绍,已经实现了将模板编译成具体数据,接下来要介绍的是如何监听数据的变化,本章主要完成这个需求即可。

在我们文章的开始,我写了一个 Vue 双向数据绑定原理的文章当中封装了一个 Observer 类,这个类的作用就是监听数据的变化,当数据发生变化的时候,会通知订阅者,订阅者会去更新视图。

所以我先将这个类拿过来,稍微修改一下,没有这个类的源码可以去我之前的文章中查看,或者我这里也贴一下:

class Observer {
    constructor(data) {
        this.observer(data);
    }

    observer(obj) {
        if (obj && typeof obj === 'object') {
            for (let key in obj) {
                this.defineReactive(obj, key, obj[key]);
            }
        }
    }

    defineReactive(obj, attr, value) {
        this.observer(value);
        Object.defineProperty(obj, attr, {
            get() {
                return value;
            },
            set: (newValue) => {
                if (value !== newValue) {
                    this.observer(newValue);
                    value = newValue;
                    console.log('监听到数据的变化, 需要去更新UI');
                }
            }
        })
    }
}

在 Nue 中,我们需要将这个类稍微修改一下,在根据指定的区域和数据去编译渲染界面这一步中,我们需要将数据传入到 Observer 类中,这样就可以监听数据的变化了。

image-20231015183202818

// 第一步:给外界传入的所有数据都添加get/set方法
//         这样就可以监听数据的变化了
new Observer(this.$data);

接下来是测试环节,我们在浏览器中打开页面,修改数据,看看是否会触发监听数据变化的方法:

image-20231015183339873

posted @   BNTang  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
  1. 1 总会有人离开 王巨星
  2. 2 月亮 孟凡明
  3. 3 迟里乌布
  4. 4 我只能离开 颜人中
  5. 5 达尔文 蔡健雅
  6. 6 夜色滚烫 叶明净
  7. 7 你的星环 路飞文
  8. 8 不再说话 三块木头
  9. 9 黄昏 粥粥和小伙/粥粥
  10. 10 爱不单行 刘大拿
  11. 11 心动贩卖机 PIggy
  12. 12 别来无恙 苏星婕
  13. 13 我们的歌 刘大拿
  14. 14 一直很安静 王贰浪
  15. 15 去有风的地方 清音
  16. 16 雪 Distance Capper/罗言
  17. 17 坏女孩 徐良/小凌
  18. 18 乐园 沧桑Cang333/虎皮蛋/曲甲
  19. 19 Ayo(Explicit) Chris Brown/Tyga
  20. 20 我的美丽feat.海洋Bo 海洋Bo/高睿
  21. 21 世事可爱 粥粥和小伙/粥粥
  22. 22 我记得 赵雷
  23. 23 我想牵着你的手 许嵩
  24. 24 人们都不懂 刘诺然
  25. 25 寻一个你(电视剧《苍兰诀》温情主题曲) TTTTTeehom
  26. 26 子莫格尼 杉和
  27. 27 Cat Cafe Shoffy
  28. 28 风停了雨停了我们还拥抱着 Superluckyqi
  29. 29 寂寞沙洲冷 于潼
  30. 30 三国恋 王巨星
  31. 31 达尔文 林俊杰
  32. 32 有些 颜人中
  33. 33 小模样 张小只ya
  34. 34 是否 程响
  35. 35 楼顶上的小斑鸠 队长
  36. 36 笑场 薛之谦
  37. 37 还是分开 张叶蕾
  38. 38 修炼爱情 林俊杰
  39. 39 二零三 毛不易
  40. 40 雅俗共赏 许嵩
  41. 41 Serendipity 古瑞斯Graps/Zakiya晴子
  42. 42 就让这大雨全都落下·2023 刘大拿
  43. 43 老男孩 筷子兄弟
  44. 44 有何不可 许嵩
  45. 45 缓缓 杜宣达
  46. 46 好久不见 陈奕迅
  47. 47 爱的魔法(Cover 金莎) 封茗囧菌
  48. 48 在你的身边 盛哲
  49. 49 带我去找夜生活 告五人
  50. 50 假面舞会 很美味
  51. 51 STAY The Kid LAROI/Justin Bieber
  52. 52 我好想睡觉的 无敌西红柿
  53. 53 日不落(温柔版)
  54. 54 恋爱画板 锦零
  55. 55 7710 好乐无荒/尹露浠
  56. 56 给你呀(又名:for ya) 蒋小呢
  57. 57 Love Story Taylor Swift
  58. 58 Plain Jane(Remix 13z) 鱼幼微
  59. 59 晚风 7opy/BT07
  60. 60 拜托 孙晨
  61. 61 乌梅子酱 李荣浩
  62. 62 南半球与北海道 范倪Liu
  63. 63 星河万里 Rom邢锐
是否 - 程响
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 呆踹

作曲 : 呆踹

编曲 : 刘圣华

出品人 : 潘鸿业/陆瑒

午后的 松柏树下 随风摇晃的 枝丫

落叶 送别了盛夏 温度也 急转直下

漫步在 肩并肩 走过的路 回忆 应接不暇

也 会有 遗憾吧 比如 我失去了他

在纸上 涂涂画画 心事 不经意的 写下

仍会 莫名的牵挂 写下的 名字 是他

曾经的 情投意洽 如今早已 各自天涯

是否 要留下遗憾 才让人 念念不忘

是否 要与你无关 内心才 毫无波澜

从前的 侃侃而谈 然后的 惴惴不安

在 喧嚣之外 孤单 戒掉 廉价的 浪漫

为何 留下了遗憾 留下了 长吁短叹

似 从未走出一般 来来回回 兜兜又转转

与其 强求的圆满 不如 坦然的 离散

等待着 大雾尽散 清风白云 与我相伴

在纸上 涂涂画画 心事 不经意的 写下

仍会 莫名的牵挂 写下的 名字 是他

曾经的 情投意洽 如今早已 各自天涯

是否 要留下遗憾 才让人 念念不忘

是否 要与你无关 内心才 毫无波澜

从前的 侃侃而谈 然后的 惴惴不安

在 喧嚣之外 孤单 戒掉 廉价的 浪漫

为何要 留下遗憾 留下了 长吁短叹

似 从未走出一般 来来回回 兜兜又转转

与其 强求的圆满 不如 坦然的 离散

等待着 大雾尽散 清风白云 与我相伴

是否 要留下遗憾 才让人 念念不忘

是否 要与你无关 内心才 毫无波澜

从前的 侃侃而谈 然后的 惴惴不安

在 喧嚣之外 孤单 戒掉 廉价的 浪漫

为何 留下了遗憾 留下了 长吁短叹

似 从未走出一般 来来回回 兜兜又转转

与其 强求的圆满 不如 坦然的 离散

等待着 大雾尽散 清风白云 与我相伴

混音工程师 : 王朋

母带 : 全相彦

监制 : 巩一凡@骁Studio

总监制 : 闫骁男@骁Studio

视觉设计 : 华玮轩

宣传发行 : 冷小婧

企划 : 袋熊/刘芳/酸奶麦片/马可

版权商务 : 温悉

统筹 : 陈亚飞

营销 : 银河方舟X壳壳菠萝

项目总监 : 庄有豪

OP : 北京金翼龙国际文化传媒有限公司

SP : 银河方舟

【未经著作权人许可 不得翻唱翻录或使用】

点击右上角即可分享
微信分享提示