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 解析器:解析指令,初始化模版,绑定订阅者


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM