4

在 lit-html 中,我们拥有在firstUpdated()渲染元素后运行一次性初始化的方法。

如果您只需要在该模板中的所有子项都更新后才需要运行一个函数怎么办?如果您的模板包含原生表单元素和自定义元素怎么办?

现在我正在做一个可怕的事情:

  firstUpdated () {
    super.firstUpdated()

    setTimeout(() => this.onceChildrenAreUpdated(), 100)
  }

肯定有更好的方法吗?我意识到这很棘手,因为对于 lit-element “渲染”意味着 DOM 已完成;这并不意味着里面的所有元素都完成了然后想要做的任何初始化。

但是还是...

4

1 回答 1

4

您可以等待所有孩子更新:

  async firstUpdated () {
    const children = this.shadowRoot.querySelectorAll('*'));
    await Promise.all(Array.from(children).map((c) => c.updateComplete));
    this.onceChildrenAreUpdated();
  }

querySelectorAll('*')如果可能的话,用更具体的东西代替。

于 2019-09-26T23:33:01.247 回答