如何使用dom-repeat设置下拉值

时间:2018-02-20 00:17:45

标签: polymer polymer-2.x dom-repeat

如果符合特定条件,我试图从下拉列表中选择第二个选项,我遇到selectedIndex

的问题
<select id="contact" on-change="selectContact">
  <option  value="-1" selected>Select Contact</option>
  <template is="dom-repeat" items="[[contacts]]" as="contact" index-as="index">
     <option value="[[contact]]">[[contact]]</option>
  </template>
</select>

<select id="name" on-change="selectName">
  <option  value="-1" selected>Select Name</option>
    <template is="dom-repeat" items="[[names]]" as="name">
      <option value="[[name]]">[[name]]</option>
    </template>
</select>

...

selectContact() {
  for (let i = 0; i < this.customerTable[0].length; i++) {
    if(true) {
        array[i] = this.customerTable[0][i]['name'];
      }
  }
  this.names = this.$.util.utilFn(array);


  if(this.names.length == 1) {
    this.shadowRoot.querySelector('#name').selectedIndex = 2;
  }

}

如何选择dom-repeat下拉列表的第二个孩子?

1 个答案:

答案 0 :(得分:1)

selectContact()中,您正在设置this.names(第二个<dom-repeat>.items绑定到的地方)并立即尝试在DOM之前选择<dom-repeat>的第一项实际上已经更新了。

在选择项目之前,您实际上需要等到Polymer.RenderStatus.afterNextRender()的下一个渲染帧:

selectContact() {
  this.names = ['John'];

  if (this.names.length === 1) {
    Polymer.RenderStatus.afterNextRender(this, () => {
      this.shadowRoot.querySelector('#name').selectedIndex = 1;
    });
  }
}

demo