Vue的响应式原理---(v-model中的双向绑定原理)
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
Vue的响应式原理---(v-model中的双向绑定原理)的更多相关文章
- vue的双向绑定原理浅析与简单实现
很久之前看过vue的一些原理,对其中的双向绑定原理也有一定程度上的了解,只是最近才在项目上使用vue,这才决定好好了解下vue的实现原理,因此这里对vue的双向绑定原理进行浅析,并做一个简单的实现. ...
- Vue的响应式原理
Vue的响应式原理 一.响应式的底层实现 1.Vue与MVVM Vue是一个 MVVM框架,其各层的对应关系如下 View层:在Vue中是绑定dom对象的HTML ViewModel层:在Vue中是实 ...
- vue.js响应式原理解析与实现
vue.js响应式原理解析与实现 从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染.之后,再接触了vue.js,当时也一度很 ...
- vue深入响应式原理
vue深入响应式原理 深入响应式原理 — Vue.jshttps://cn.vuejs.org/v2/guide/reactivity.html 注意:这里说的响应式不是bootsharp那种前端UI ...
- Vue 数据响应式原理
Vue 数据响应式原理 Vue.js 的核心包括一套“响应式系统”.“响应式”,是指当数据改变后,Vue 会通知到使用该数据的代码.例如,视图渲染中使用了数据,数据改变后,视图也会自动更新. 举个简单 ...
- 一探 Vue 数据响应式原理
一探 Vue 数据响应式原理 本文写于 2020 年 8 月 5 日 相信在很多新人第一次使用 Vue 这种框架的时候,就会被其修改数据便自动更新视图的操作所震撼. Vue 的文档中也这么写道: Vu ...
- 深入解析vue.js响应式原理与实现
vue.js响应式原理解析与实现.angularjs是通过脏检查来实现数据监测以及页面更新渲染.之后,再接触了vue.js,当时也一度很好奇vue.js是如何监测数据更新并且重新渲染页面.vue.js ...
- vue系列---响应式原理实现及Observer源码解析(一)
_ 阅读目录 一. 什么是响应式? 二:如何侦测数据的变化? 2.1 Object.defineProperty() 侦测对象属性值变化 2.2 如何侦测数组的索引值的变化 2.3 如何监听数组内容的 ...
- vue基础响应式数据
1.vue 采用 v……vm……m,模式,v---->el,vm---->new Vue(实例),m---->data 数据,让前端从操作大量的dom元素中解放出来. 2.vue响应 ...
随机推荐
- cin,cin.get(),cin.getline(),gets(),getchar()函数的用法
1.cin>> 用法a:最基本的流输入用法,接受一个数字或字符,自动跳过输入的空格. 用法b:接受一个字符串,但是遇到除开头外的空格则会终止输入. #include<iostream ...
- CodeForces - 1109A
#include<cstdio> #include<map> #include<iostream> #include<algorithm> using ...
- 关于文件中"wb"与"rb"的理解
“rb”,”wb”这两种方式在操作文件时,直接跳过了系统的编码方式,在windows系统中,用的编码为gbk: ①:with open(“a.txt”,”w”) as f1: F1.write(“aa ...
- 高数(求x的n次方的导数)
- 7-5 A除以B(10 分)
真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果. 输入格式:输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔. 输出格 ...
- vue-routerV3.1版本报错:message: "Navigating to current location ("/home") is not allowed",
出现这个错误的原因是,在路由跳转的时候两次push的path地址相同 解决方法两种: 1.切换版本回3.0版本 2.在你引了vue-router的js文件里加上如下代码即可 import VueRou ...
- 最短路-B - 六度分离
B - 六度分离 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6 ...
- javascripts的this
前言 javascript 的 this 指向主要是依赖上下文对象决定,箭头函数例外. 默认绑定 在全局作用域下调用函数,函数的this默认指向window. 注意1:严格模式下,默认指向undefi ...
- php 时间 日期
获取月初与月末 /** * 获取当前月初与月末时间 * * */ $month =8; $year = 2019; $startDay = $year . '-' . $month . '-1'; $ ...
- python:利用smtplib发送邮件详解
本文转自:https://www.cnblogs.com/insane-Mr-Li/p/9121619.html 自动化测试中,测试报告一般都需要发送给相关的人员,比较有效的一个方法是每次执行完测试用 ...