代码之家  ›  专栏  ›  技术社区  ›  balteo

在Vue组件中定义用户定义的getter

  •  1
  • balteo  · 技术社区  · 6 年前

    我的问题涉及Vue,更具体地说是反应性和反应性吸气剂/设置器: https://vuejs.org/v2/guide/reactivity.html

    我可以在Vue组件中定义自己的getter吗?当Vue添加自己的反应性getter时,它们会发生什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Vamsi Krishna    6 年前

    data

    例如,考虑

    data:{
      foo: 'hello world',
      bar: 3
    }
    

    let key = Object.keys(data)
    
    for (let i = 0; i < keys.length; i++) {
      let val = data[keys[i]];
      Object.defineProperty(data, keys[i], {
        get(){
          // add this property as a dependency when accessed
          return val;
        },
        set(newVal){
          //notify for a change
          val = newVal;
        }
      })
    }
    

    source code predefined getters or setters .

    Object.defineProperty(obj, key, {
      enumerable: true,
      configurable: true,
      get: function reactiveGetter() {
        const value = getter ? getter.call(obj) : val;
        if (Dep.target) {
          dep.depend();
          if (childOb) {
            childOb.dep.depend();
            if (Array.isArray(value)) {
              dependArray(value);
            }
          }
        }
        return value;
      },
      set(newVal) {
        //...
      }
    });
    

    line const value = getter ? getter.call(obj) : val;

    Vue只是在做更多的工作,通过调用一些与依赖相关的方法来使它们成为反应性的。