赞
踩
要想实现双向绑定需要做到两点:1.如何监听data对象是否改变;2.对象变化后如何去更新视图
一、如何监听data对象是否改变
在Vue监听data对象是否改变主要通过defineReactive方法来做到的,就是利用Object.defineProperty的get和set方法。如下代码所示:
- export function defineReactive (
- obj: Object,
- key: string,
- val: any,
- customSetter?: Function
- ) {
- const dep = new Dep()//每个监听的对象都新建一个dep对象,dep相当于观察者模式中的被观察对象,watcher相当于观察者对象
-
-
- const property = Object.getOwnPropertyDescriptor(obj, key)
- if (property && property.configurable === false) {
- return
- }
-
- // cater for pre-defined getter/setters
- const getter = property && property.get
- const setter = property && property.set
-
- let childOb = observe(val)
- Object.defineProperty(obj, key, {
- enumerable: true,
- configurable: true,
- get: function reactiveGetter () {
- const value = getter ? getter.call(obj) : val
- if (Dep.target) {

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。