Vue的响应式原理---(v-model中的双向绑定原理)
2024-10-08 10:49:07
Vue响应式原理
不要认为数据发生改变,界面跟着更新是理所当然.
具体代码实现:https://gitee.com/ahaMOMO/Vue-Responsive-Principle.git
看下图:
例子如下:
显示哈哈哈,但是当我们改变message时,也会相应改变
加了几个message之后,页面也相应得到变化
问题来了:
(1)app.message修改数据,Vue内部是如何监听message数据?
*Object.defineProperty-->监听对象属性的改变
当你的obj中的name发生改变之后:
obj.name="kobe"时,在set方法中监听name的改变
(2)当数据发生改变,Vue是如何知道要通知哪些人,界面发生刷新?
*发布订阅者设计模式
监听name改变后,要告诉谁?谁用就告诉谁,谁在用?
给每个使用的定义一个名字,谁用一次就会调用一次get方法,所以就知道谁在使用
定义依赖类
subs属性装的是watcher中的所有订阅者
定义订阅者
在get方法中,创建watcher(因为谁在使用get谁就是订阅者的一员)
const dep = new Dep();
const w1 = new Watcher('张三');
dep.addSub(w1);//添加订阅者
const w2 = new Watcher('李四');
dep.addSub(w2);//添加订阅者
在set方法中,调用dep中的notify方法
dep.notify();//通知所有的订阅者
在obj中的每个属性都会创建一个dep对象
使用图解分析过程如下:
具体代码实现:https://gitee.com/ahaMOMO/Vue-Responsive-Principle.git
最新文章
- 在Ubuntu上搭建Hadoop群集
- 封装一个函数获取匹配特定的css选择符
- SearchLookUpEdit
- maven项目常见问题
- DAO 开发模式的几个类
- MySQL 在 LIMIT 条件后注入
- php中的魔术方法
- uC/OS-II中includes块
- JVM类加载机制
- ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯
- lua序列化(支持循环引用)
- Oracle数据库——触发器的创建与应用
- for name in loop Shell
- 简单的LRU Cache设计与实现
- 老司机实战Windows Server Docker:3 单节点Windows Docker服务器简单运维(上)
- 解决Oracle登录时出现无法处理服务名问题
- Intellij IDEA插件开发入门
- 虹软免费人脸识别SDK注册指南
- MyEclipse如何配置Struts2源码的框架压缩包
- pom格式
热门文章
- install multiple versions of CUDA
- 【卸载Pycharm】
- exe 发布为服务
- C# GZip Compress DeCompress
- R语言读写数据
- 微信小程序scroll-view去除滚动条
- PP: GRU-ODE-Bayes: Continuous modeling of sporadically-observed time series
- liunx下安装Docker
- 3ds Max File Format (Part 4: The first useful data; Scene, AppData, Animatable)
- RMQ(区间最值问题)