【Github】项目名:DMQ/mvvm:剖析vue实现原理并自己动手实现mvvm
项目简介
这个项目主要是剖析Vue的双向数据绑定原理并自己动手实现mvvm。相关代码主要摘取自vue源码并进行简化改造,虽然存在未考虑数组处理、数据循环依赖等问题,但不影响对原理的理解,并且所有相关代码都能在github上找到。
项目目的
1. 帮助读者了解vue的双向数据绑定原理以及核心代码模块。
2. 满足读者对于如何实现双向绑定的好奇心,并且在阅读vue源码时更有帮助。
核心技术
1. 数据监听器Observer:利用Object.defineProperty()对数据对象的属性进行递归遍历监听,将数据对象的所有属性加上setter和getter,从而在数据变动时能拿到最新值并通知订阅者。通过维护一个消息订阅器数组收集订阅者,数据变动触发notify,再调用订阅者的update方法。
2. 指令解析器Compile:主要解析模板指令,将模板中的变量替换成数据,初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知就更新视图。为提高性能,会先将vue实例根节点的el转换成文档碎片fragment进行解析编译操作,解析完成再将fragment添加回原来的真实dom节点。
3. Watcher:作为连接Observer和Compile的桥梁,在自身实例化时往属性订阅器(dep)里面添加自己,自身有update()方法,待属性变动dep.notice()通知时,能调用自身的update()方法,并触发Compile中绑定的回调。
4. MVVM入口函数:整合Observer、Compile和Watcher三者,通过Observer监听model数据变化,Compile解析编译模板指令,Watcher搭起两者间通信桥梁,实现数据与视图的双向绑定效果,还利用Object.defineProperty()实现属性代理,使访问vm的属性代理为访问vm._data的属性。
项目总结
本文围绕双向绑定的不同实现做法、Observer、Compile、Watcher、MVVM这几个模块阐述了双向绑定的原理和实现,通过梳理思路展示关键代码讲解如何实现MVVM双向绑定。文中可能存在不足,欢迎大家指正,期待大家留言参与讨论。
项目地址
数据统计
数据评估
本站链氪巴士提供的DMQ/mvvm:剖析vue实现原理并自己动手实现mvvm都来源于网络,不保证外部链接的准确性和完整性,同时,对于该外部链接的指向,不由链氪巴士实际控制,在2024年12月6日 上午12:00收录时,该网页上的内容,都属于合规合法,后期网页的内容如出现违规,可以直接联系网站管理员进行删除,链氪巴士不承担任何责任。