自定义组件 oberver bug
发布于 5 年前 作者 junluo 8663 次浏览 来自 问答

自定义组件中定义了一个数组类型的propertie,局部修改数组的某个元素,导致 Observer 回调函数的 val 值为修改的数组元素值,正确情况是,不应该触发才对;

Component({
  properties: {
    list: {
      type: Array,
      value: [{
        key: '1'
      }],
      observer(val) {
        console.log(val);
      }
    }
  },

  methods: {

   // 局部修改数组元素

    changeSubItem() {
      const data = Object.assign({}, this.data.list[0]); // 创建一个新对象,并浅复制
      data.key = '2';
      this.setData({
        [`list[0]`]: data // 修改数组第一个元素
      });
    }
  }
});
3 回复

你好,目前的设计是,即使是进行局部修改,也一定会触发observer。

抱歉,文档上忘了说明 observer 有第三个参数表示修改的是哪个部分的值,你可以依靠这个来判断。我们之后会更新一下文档。

如果需要整体的值,可以直接读取 this.data.PROPERTY_NAME 。

局部修改的时候newValue的值为什么是这个局部的值而不是整体的值。。。。。

回到顶部