奇怪的 Angular 绑定问题 - 更新不相关的组件

Wierd Angular Binding Issue - Updating unrelated component

我有一个分页 table,其中包含 200 多列,其中 2 列带有单选按钮组和一个输入列。

我观察到的奇怪情况是,当我更新 table 第一页上的值时,当我导航到 table 的第 N 页时,我发现一些值发生了变化。当我回到上一页更改值时,我发现它反映在同一个第N页的同一个字段中。这只发生在某些值而不是所有值上,并且更改的值来自 table.

的同一列

欢迎提出任何建议。

<table [mfData]="smartRefactorComponents" #mfData="mfDataTable" [mfRowsOnPage]="15">
  <thead class="thead-inverse">
    <tr>
      <th class="centre-text" rowspan="2">
        <mfDefaultSorter by="name">
          Name
        </mfDefaultSorter>
      </th>
      <th class="centre-text">
        <mfDefaultSorter by="1">
          Criticality
        </mfDefaultSorter>
      </th>
      <th class="centre-text">
        <mfDefaultSorter by="2">
          Coverage
        </mfDefaultSorter>
      </th>
      <th class="centre-text">
        <mfDefaultSorter by="3">
          Code Familiarity
        </mfDefaultSorter>
      </th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor="let item of mfData.data; let i = index">
      <td>
        <div class="form-group">
          <label>{{item.name}}</label>
        </div>
      </td>
      <td>
        <app-metric #crit id="crit+{{i}}" [(srInput)]="item.userInputs.cr" (change)="updateUserInputs(i, 'cr', crit.srInput)"></app-metric>
      </td>
      <td>
        <app-metric #cov id="cov+{{i}}" [(srInput)]="item.userInputs.co" (change)="updateUserInputs(i, 'co', cov.srInput)"></app-metric>
      </td>
      <td>
        <app-metric #fam id="fam+{{i}}" [(srInput)]="item.userInputs.cd" (change)="updateUserInputs(i, 'cd', fam.srInput)"></app-metric>
      </td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td class="centre-text" colspan="3">
        <mfBootstrapPaginator class="pagination-lg"></mfBootstrapPaginator>
      </td>
    </tr>
  </tfoot>
</table>

  updateUserInputs(
    index: number,
    key: string,
    srInput: Inputs
  ) {
    this.components[index].userInputs[key] = srInput;
    this.store.dispatch({
      type: RequestActions.UPDATE_INPUTS,
      index: index,
      userInputs: this.components[index].userInputs,
    });
    this.logger.log(index, key, srInput);
  }

您正在使用所有页面通用的索引,因为您的函数 "updateUserInputs(i, 'cr', crit.srInput)" 正在做一些奇怪的事情。我更喜欢直接使用对象而不是使用索引进行更新操作

updateUserInputs(
item: any//you can declare your type,
key: string,
srInput: Inputs
) {
   item.userInputs[key] = srInput;
   this.store.dispatch({
     type: RequestActions.UPDATE_INPUTS,
     item: item,
     userInputs: item.userInputs,
   });
   this.logger.log(item, key, srInput);
 }

你也必须改变你的商店发货