0

我有一个包含多个项目的 iview 表单,每个项目的第一列都有一个复选框。复选框的代码片段是:

<input type='checkbox' v-model='item.isChecked' @change='switchBillSelected(item)'></input>
    
    switchBillSelected(item) {
      if (!item.isChecked) {
        for (let i=0; i<bills.length; i++) {
          if (bills[i].id == item.id) {
            bills.splice(i, 1)
            break;
          }
        }
      }
    }

首先,检查所有项目。然后,如果我取消选中除最后一项以外的项目,则该项目消失,但未选中下一项!有没有办法避免这种副作用?

4

1 回答 1

0

我已经修改了我的代码以强制刷新整个表单,它可以工作。但我认为它不够优雅。有没有更好的办法?...

<input type='checkbox' v-model='item.isChecked' @change='switchBillSelected(item)'></input>

switchBillSelected(item) {
  if (!item.isChecked) {
    for (let i=0; i<bills.length; i++) {
      if (bills[i].id == item.id) {
        bills.splice(i, 1)
        break;
      }
    }

    // Keep an alias of this.bills
    let alias = this.bills;

    // Clear & re-assign this.bills to refresh the check status of visible rows
    this.bills = [];
    setTimeout((bills) => {
      this.bills= bills;
    }, 500, alias)
  }
}

...

于 2020-07-13T00:10:37.523 回答