簡體   English   中英

* ng對原始數據類型的行為

[英]*ngFor Behaviour on primitive data type

我有一個對象列表,我在HTML頁面上使用*ngFor顯示。 現在,用戶與U​​I交互並更改其中一個原始值(boolean,從false變為true)。

根據我的理解, *ngFor將僅在完全修改列表對象時呈現更改,即刪除並再次添加到列表中。 如果我對這個概念是正確的,那么請您建議一種方法來反映基元類型的變化,而無需重新初始化組件或修改對象引用。

例如:

  <div *ngFor="let item of list">
        <md-checkbox [(ngModel)]="item.selected"></md-checkbox>
  </div>

用戶單擊該復選框,但必須在從服務器進行某些驗證后勾選復選框。 因此,假設需要取消選中該復選框,並且用戶會在小吃店上收到消息。 所以我遍歷列表並將item.selected修改為false。 但是,當我修改對象項中選擇的原始類型(布爾值)時,不會反映更改。 那么如何在不重新加載或再次初始化頁面的情況下呈現新值。

如果需要更多輸入,請告訴我。

如果使用原始值,則需要trackBy

  <div *ngFor="let item of list trackBy:trackByIdx">
        <md-checkbox [(ngModel)]="item.selected"></md-checkbox>
  </div>
  trackByIdx(index: number, obj: any): any {
    return index;
  }

另請參見Angular2 NgFor內部樹模型:刪除后添加元素的順序錯誤

根據下面的討論更新

更改輸入值時更改由ngModel綁定的布爾值可能導致ngModel未更新。 添加人工更改和callign detectChanges可用於解決。

constructor(private cdRef:ChangeDetectorRef) {}

deactivate(index: number) {
  this.list[index][0] = true;
  this.cdRef.detectChanges();
  this.list[index][0] = false;
  this.cdRef.detectChanges();
  console.log(this.list);
}

Plunker的例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM