首頁 > web前端 > css教學 > 如何在 Angular 中的路線轉換期間實作載入畫面?

如何在 Angular 中的路線轉換期間實作載入畫面?

Patricia Arquette
發布: 2024-12-07 14:57:12
原創
663 人瀏覽過

How to Implement a Loading Screen During Route Transitions in Angular?

在 Angular 2 中的路由轉換期間顯示載入畫面

Angular Router 提供導航事件,使您能夠監視變更並相應地修改 UI。這些事件包括 NavigationStart、NavigationEnd、NavigationCancel 和 NavigationError。

使用導航事件

要在路線變更期間顯示載入畫面,您可以在根元件(通常是應用程式)中訂閱這些導航事件.component.ts) 並根據觸發的特定事件切換載入UI。

首先,從@angular/router 並在根組件中定義一個布林標誌,loading。

import {
  Router,
  Event as RouterEvent,
  NavigationStart,
  NavigationEnd,
  NavigationCancel,
  NavigationError
} from '@angular/router'

@Component({})
export class AppComponent {
  loading = true; // Initializing to true to show loading spinner on first load
  constructor(private router: Router) {
    this.router.events.subscribe((e : RouterEvent) => {
       this.navigationInterceptor(e);
     })
  }
}
登入後複製

在 navigationInterceptor 方法中,您可以監聽 NavigationStart、NavigationEnd、NavigationCancel 和 NavigationError 事件並切換載入標誌基於每個事件。

  // Shows and hides the loading spinner during RouterEvent changes
  navigationInterceptor(event: RouterEvent): void {
    if (event instanceof NavigationStart) {
      this.loading = true;
    }
    if (event instanceof NavigationEnd) {
      this.loading = false;
    }
    if (event instanceof NavigationCancel) {
      this.loading = false;
    }
    if (event instanceof NavigationError) {
      this.loading = false;
    }
  }
登入後複製

在根模板中,您可以使用條件渲染來根據載入顯示載入疊加層標誌的狀態。

<div>
登入後複製

遵循此方法,您可以在 Angular 2 應用程式中的路線轉換期間有效地顯示載入畫面。

效能最佳化

如果效能為一個問題,您可以利用NgZone 和Renderer 來增強載入微調器的效能,如更新的程式碼片段所示如下:

private _navigationInterceptor(event: RouterEvent): void {
    if (event instanceof NavigationStart) {
      this.ngZone.runOutsideAngular(() => {
        this.renderer.setElementStyle(
          this.spinnerElement.nativeElement,
          'opacity',
          '1'
        )
      })
    }
    if (event instanceof NavigationEnd) {
      this._hideSpinner()
    }
    // Set loading state to false in both of the below events to
    // hide the spinner in case a request fails
    if (event instanceof NavigationCancel) {
      this._hideSpinner()
    }
    if (event instanceof NavigationError) {
      this._hideSpinner()
    }
  }

  private _hideSpinner(): void {
    this.ngZone.runOutsideAngular(() => {
      this.renderer.setElementStyle(
        this.spinnerElement.nativeElement,
        'opacity',
        '0'
      )
    })
  }
登入後複製

此技術在更新微調器的不透明度時繞過Angular 的更改檢測機制,從而實現更平滑的過渡。

以上是如何在 Angular 中的路線轉換期間實作載入畫面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板