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中的双向绑定原理)的更多相关文章

  1. vue的双向绑定原理浅析与简单实现

    很久之前看过vue的一些原理,对其中的双向绑定原理也有一定程度上的了解,只是最近才在项目上使用vue,这才决定好好了解下vue的实现原理,因此这里对vue的双向绑定原理进行浅析,并做一个简单的实现. ...

  2. Vue的响应式原理

    Vue的响应式原理 一.响应式的底层实现 1.Vue与MVVM Vue是一个 MVVM框架,其各层的对应关系如下 View层:在Vue中是绑定dom对象的HTML ViewModel层:在Vue中是实 ...

  3. vue.js响应式原理解析与实现

    vue.js响应式原理解析与实现 从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染.之后,再接触了vue.js,当时也一度很 ...

  4. vue深入响应式原理

    vue深入响应式原理 深入响应式原理 — Vue.jshttps://cn.vuejs.org/v2/guide/reactivity.html 注意:这里说的响应式不是bootsharp那种前端UI ...

  5. Vue 数据响应式原理

    Vue 数据响应式原理 Vue.js 的核心包括一套“响应式系统”.“响应式”,是指当数据改变后,Vue 会通知到使用该数据的代码.例如,视图渲染中使用了数据,数据改变后,视图也会自动更新. 举个简单 ...

  6. 一探 Vue 数据响应式原理

    一探 Vue 数据响应式原理 本文写于 2020 年 8 月 5 日 相信在很多新人第一次使用 Vue 这种框架的时候,就会被其修改数据便自动更新视图的操作所震撼. Vue 的文档中也这么写道: Vu ...

  7. 深入解析vue.js响应式原理与实现

    vue.js响应式原理解析与实现.angularjs是通过脏检查来实现数据监测以及页面更新渲染.之后,再接触了vue.js,当时也一度很好奇vue.js是如何监测数据更新并且重新渲染页面.vue.js ...

  8. vue系列---响应式原理实现及Observer源码解析(一)

    _ 阅读目录 一. 什么是响应式? 二:如何侦测数据的变化? 2.1 Object.defineProperty() 侦测对象属性值变化 2.2 如何侦测数组的索引值的变化 2.3 如何监听数组内容的 ...

  9. vue基础响应式数据

    1.vue 采用 v……vm……m,模式,v---->el,vm---->new Vue(实例),m---->data 数据,让前端从操作大量的dom元素中解放出来. 2.vue响应 ...

随机推荐

  1. source、sh、./执行脚本对变量的影响

    shell脚本中的变量: local一般用于局部变量声明,多在在函数内部使用. shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止. she ...

  2. C#常规TcpListener

    1.Xaml <Window x:Class="Server.MainWindow" xmlns="http://schemas.microsoft.com/win ...

  3. laravle中常见的数据库加密

    // 1.md5加密 $str=md5('123456'); // 2.base64_decode加密 $str2=base64_encode('123456'); // 2.1 base64_解密 ...

  4. 设置display:inline-block 元素间隙

    上代码: <div class="page"> <a href="" class="num">共1231条</ ...

  5. asp.net web core 开发问题汇总(1)

    1   ASP.NET Core 设置默认静态起始页 转载地址:ASP.NET Core 设置默认起始页(如default.html) 注:1  默认情况下ASP.NET Core应用程序时不支持静态 ...

  6. GNU Screen使用

    基本使用 SSH时可以方便地resume工作 # open new screen session screen # restore screen -r  Steps Using GNU Screen ...

  7. 我的翻译--针对Outernet卫星信号的逆向工程

    前言 Outernet[1]是一家旨在让访问国际互联网更加方便自由的公司,他们使用卫星来广播维基百科或者其他网站.目前,他们的广播主要使用三颗国际海事卫星[3]的L波段[2],使其广播覆盖全球,大多数 ...

  8. windows ltsc版本没有Microsoft Store怎么解决

      [背景]以前一直都是使用windows的企业版,后来发现ltsc版本更好,这个好处在这里就不多说,懂的人自然会懂.但是发现很多应用都没有,包括Microsoft Store商店都没有.下面就是解决 ...

  9. 二分-E - Rikka with Mutex

    E - Rikka with Mutex Sometimes, technical terms implicate some life philosophy. Mutex is one of them ...

  10. 55.ORM外键:引用同app下的不同模型,引用不同app下的模型,引用模型自身使用详解

    外键和表关系 外键是属于数据库级别的,在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的.外键的存在使得ORM框架在处理表关系的时 ...