2

我有一个对象如下。现在,当我更改属性并调用 requestRender 时,它不会触发。据我所见,未检测到属性更改。我怎样才能做到这一点?

static get properties() {
  return {
    items: Object
    }
}

constructor() {
  super();
  this.items = {
    list: [{ a: 5, b: 6 },{ a: 5, b: 6 }]
  }
}

onClick() {
  this.items.list[1].a = 10; //change property
  requestRender(); //doesn't pick up the change...
}

4

1 回答 1

6

lit-element 要求您以不可变的方式管理属性,因此要更新该数据点,需要以下内容:

onClick() {
  let list = this.items.list.slice();
  let item = Object.assign({}, list[1]);
  item.a = 10;
  list[1] = item;
  this.items = {
    list: list
  };
  // will update on it's own with out a render request
}

以上是一个非常完整的,但是 ES5(ish) 对这个问题的回答。也可以使用更现代的 JS 来做到这一点,这将使这更易于管理。

onClick() {
  this.items.list[1].a = 10;
  this.items = {
    ...this.items
  };
  // will update on it's own with out a render request
}

希望有帮助。

于 2018-07-12T20:29:29.783 回答