前言
在一些前端框架中,例如
angular
,vue
都有数据双向数据绑定的功能,这个功能极大的方便我们操作数据。那么接下来我会讲解一下双向数据绑定的4种实现方式。
方式
1.手动触发绑定
手动触发绑定的主要思路是通过在数据对象定义 get 和 set 方法(可以使用其他的命名方法),调用时手动去触发 get 和 set 方法去获取数据,修改数据,改变数据后会主动去触发 get 和 set 函数中视图层的重新渲染。
简单的手动触发绑定代码如下:
|
|
2.数据劫持
数据劫持的基本思路是使用 Object.defineProperty 对 ViewModel 数据对象进行 get 和 set 的监听,当有数据变动的时候扫描元素节点,然后去运行对应节点上的指令(directive)。
代码如下:
|
|
3.使用 es6的 Proxy
利用Proxy ,它可以目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此可以对外界的访问进行过滤和改写,实现数据双向数据绑定和上一个类似。
代码如下:
|
|
4. 脏检查
脏检查的基本原理是在 ViewModel 对象的某个属性值发生变化的时候找到与这个属性值相关的所有元素,然后去比较数据变化,如果变化就用 directive 指令调用,对这个元素进行重新渲染。
简单的脏检查代码如下:
|
|