收藏
回答

自定义组件 oberver bug

问题模块 框架类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 自定义组件 微信iOS客户端 最新 最新

自定义组件中定义了一个数组类型的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 // 修改数组第一个元素
      });
    }
  }
});


最后一次编辑于  2018-03-21  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

3 个回答

  • 小程序技术专员-LastLeaf
    小程序技术专员-LastLeaf
    2018-05-03

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


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

    2018-05-03
    赞同
    回复
  • 菜
    2018-05-03

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

    2018-05-03
    赞同
    回复
  • 小程序技术专员-LastLeaf
    小程序技术专员-LastLeaf
    2018-03-22

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

    2018-03-22
    赞同
    回复