Vue数据双向绑定原理

Alangc612 2019-08-14 原文

Vue数据双向绑定原理

先看效果图

//代码:
<div id="app">
    <input v-model="name" type="text">
    <h1>{{name}}</h1>
</div>
<script src="./js/observer.js"></script>
<script src="./js/watcher.js"></script>
<script src="./js/compile.js"></script>
<script src="./js/index.js"></script>
<script>
const vm = new Mvue({
    el: "#app",
    data: {
        name: "我是摩登"
    }
});
</script>

在说到数据的双线绑定前先熟悉下MVVM

什么是MVVM

MVVM 是 Model-View-ViewModel 的缩写。mvvm 是一种设计思想。Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑;View 代表 UI 组件,它负责将数据模型转化成 UI 展现出来,ViewModel 是一个同步 View 和 Model 的对象。

在 MVVM 架构下,View 和 Model 之间并没有直接的联系,而是通过 ViewModel 进行交互,Model 和 ViewModel 之间的交互是双向的, 因此 View 数据的变化会同步到 Model 中,而 Model 数据的变化也会立即反应到 View 上。

ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而 View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作 DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

分析

我们都知道MVVM模式在于数据和视图层的同步,也就是说当视图层发生变化时数据也将发生变化.当数据发生变化时视图也会发生改变

视图成发生变化时我们可以通过事件监听即可

数据发生改变通知视图成方法

正题来了

当我们数据方式改变时我们可以通过 Object.defineProperty 自动触发set函数从而能够通知我们跟新视图.

数据双向绑定的原理

结合上面的分析我们可以得出Vue数据双向绑定是通过数据劫持结合* 发布订阅者模式 类实现的,我们也知道 数据劫持 * 是通过Object.defineProperty 方法,当我们知道这些后我们就需要一个监听器 Observer 来监听属性的变化,得知属性的变化后我们就需要一个Watcher 订阅者来更新视图,然后我们还需要一个compile 指令解析器,原来解析我们的节点元素的* 指令 * 和 * 初始化视图 *

Observer 监听器:用来监听属性的变化通知订阅者
Watcher 订阅者:收到属性的变化,然后更新视图
Compile 解析器:解析指令,初始化模版,绑定订阅者

发表于 2019-08-14 20:19 Ala瓜皮 阅读() 评论() 编辑 收藏

 

版权声明:本文为Alangc612原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Alangc612/p/11354444.html

Vue数据双向绑定原理的更多相关文章

  1. vue学习04 v-on指令

    vue学习04 v-on指令 v-on的作用是为元素绑定事件,比如click单击,dbclick双击 v-on […]...

  2. 如何运行vue项目

    首先,列出来我们需要的东西:   node.js环境(npm包管理器) vue-cli 脚手架构建工具 cnp […]...

  3. 改造 vue-cli 脚手架

    改造 vue-cli 脚手架 注意,这里使用的 vue-cli 的版本为 2.8.2,不同版本的 vue-cl […]...

  4. 翻了翻element-ui源码,发现一个很实用的指令clickoutside

    前言 指令(directive)在 vue 开发中是一项很实用的功能,指令可以绑定到某一元素或组件,使功能的颗 […]...

  5. Vue 修改网页标题和图标

    Vue 修改网页标题和图标   by:授客 QQ:1033553122   开发环境   Win 10   V […]...

  6. 前端ui组件——element-ui和ant design vue

    一、Element-UI 1、介绍Element-Ul是饿了么前端团队推出的一款基于Vue.js2.0 的桌面 […]...

  7. vue 获取电脑位置(省市)

    为什么只能获取到省市呢?因为通过腾讯地图api就只能获取到这里! 为什么用腾讯地图呢?不是还有高德! 高德可以 […]...

  8. 做一个官网需要多长时间

    -想学习CSS技能,但不知道从何下手的 – 想简单复习一下CSS技能 – 最近有意愿做 […]...

随机推荐

  1. S02_CH08_ ZYNQ 定时器中断实验

    S02_CH08_ ZYNQ 定时器中断实验 上一章实现了PS接受来自PL的中断,本章将在ZYNQ的纯PS里实 […]...

  2. 痞子衡嵌入式:我的博文总量终于追平了jicheng0622

    自打2016年10月选定清爽又复古的博客园平台作为痞子衡的个人博客主战场之后,痞子衡就一直坚持在博客园首发原创 […]...

  3. 联想笔记本预装软件中英文对照表 – zhuyongzhe

    联想笔记本预装软件中英文对照表 联想笔记本预装软件中英文对照表 (预装软件过多有可能会降低电脑性能) 软件名称 […]...

  4. (转)磁盘管理(一,二)

    磁盘管理(一)   本章节内容: 磁盘结构 分区类型   管理分区   管理文件系统   挂载设备   一、磁 […]...

  5. 毕业论文查重心得体会—吐血奉献

    ...

  6. ParisGabriel:Python全栈工程师(0基础到精通)教程 第二十三课(每周总结:3)

       ParisGabriel                                         […]...

  7. python基础–变量、七大数据类型等

    404...

  8. [数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念

    转自:https://blog.csdn.net/pmdream/article/details/113601 […]...

展开目录

目录导航