Angular 我在點選了上一頁或者下一頁方法之後,重新載入渲染資料。為什麼還需要再點選一次頁面的其他地方才會渲染出來?

峨嵋峰發表於2024-03-12

在你的 TypeScript 程式碼中,當呼叫 nextPage_TopSelling()prevPage_TopSelling() 方法時,雖然你更新了 currentPage_TopSelling 的值並呼叫了 reloadTopSelling() 方法,但是 Angular 並不會自動檢測到這些變化並重新渲染頁面。這是因為 Angular 的變化檢測機制是基於非同步的,在一些情況下需要手動觸發變化檢測。

為了解決這個問題,你可以注入 ChangeDetectorRef 服務並手動觸發變化檢測。首先,將 ChangeDetectorRef 匯入到你的元件中:

typescript
import { ChangeDetectorRef } from '@angular/core';
然後在元件的建構函式中注入 ChangeDetectorRef
typescript
constructor(
private cdr: ChangeDetectorRef) { }
最後,在 reloadTopSelling() 方法中的訂閱回撥函式末尾呼叫 detectChanges() 方法來手動觸發變化檢測:
typescript
reloadTopSelling() {
  // 其他程式碼...

  this.partsService.getList(undefined, stateId, undefined, this.currentPage_TopSelling, this.itemsPerPage_TopSelling).subscribe((res: PartsDto_WebSitePagedResultDto) => {
    // 其他程式碼...

    // 呼叫變化檢測
    this.cdr.detectChanges();
  });
}

透過這種方式,當你呼叫 nextPage_TopSelling()prevPage_TopSelling() 方法時,Angular 將會在資料更新後重新渲染頁面,而不需要再次點選頁面的其他地方。

相關文章