簡體   English   中英

Angular 2-NgFor不更新視圖

[英]Angular 2 - NgFor not updating view

我正在從事angular 2項目,嘗試更改列表時遇到問題。 NgFor無法識別更改,僅顯示第一次加載的列表。

這是我加載所有列表時的示例代碼,加載后立即將其重置為null。 該視圖仍顯示所有列表...

這是我的組件構造函數,例如:

 constructor( private songService : SongService)
    this.songService.getSongs()
         .subscribe(songsList => {
             this.songs = songsList;
         });

    this.songs = null;

}

這是html:

<div class="row">
    <div  *ngFor= "let song of songs" class="col-md-4">
     <app-song-item [song]="song"></app-song-item>
    <br>
    </div>
</div>

有時Angular中的循環會以無法跟蹤您的項目的方式弄糟。

為防止這種情況,您可以使用像這樣的自定義跟蹤功能

<div *ngFor="let song of songs; let i = index; trackBy: customTB" class="col-md-4">

在您的TS中

customTB(index, song) { return `${index}-${song.id}`; }

這樣,您設置了一個自定義trackBy函數,該函數將更新您的視圖(由於跟蹤ID不變,因此視圖未更新)。

您應該設置一個空數組,而不是null,也應該將其包含在方法中,否則永遠不會被調用

 this.songService.getSongs()
         .subscribe(songsList => {
             this.songs = songsList;
         });
clear(){
    this.songs = [];
}

您仍然看到列表的原因是因為它是異步的。 您不能確定何時執行subscription方法。 它可以是直接的,幾秒鍾之內,只需幾個小時,甚至根本不需要。 因此,根據您的情況,您甚至在得到清單之前都要重置該清單。

constructor( private songService : SongService)
  this.songService.getSongs()
    .subscribe(songsList => { //Might take a while before executed.
      this.songs = songsList;
    });

  this.songs = null; //executed directly
}

上面的解釋可能是導致您出現問題的原因,但也可能有其他解釋。 僅在創建組件時才調用構造函數。 更改路由器參數不一定會創建組件。 如果可以,Angular可能會重新使用該組件。

嘗試這個

constructor(private songService: SongService) {
    this.songService.getSongs()
        .subscribe(songsList => {
            this.songs = songsList;
            this.reset();
        });
}

reset() {
    this.songs = [];
}

暫無
暫無

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

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