国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

問道Angular——APP_INITIALIZER

yunhao / 2059人閱讀

摘要:概述有時需要在加載應(yīng)用之前運行代碼,有時希望暫停應(yīng)用初始化,直到完成某些限制之后再執(zhí)行。令牌可以完成這項操作。是一個函數(shù),在應(yīng)用改程序初始化時被調(diào)用。可以在類的中以的形式來配置。示例在應(yīng)用啟動階段利用校驗登錄信息是否有效問道系列

概述

??有時需要在加載應(yīng)用之前運行代碼,有時希望暫停應(yīng)用初始化,直到完成某些限制之后再執(zhí)行。APP_INITIALIZER令牌可以完成這項操作。
??APP_INITIALIZER是一個函數(shù),在應(yīng)用改程序初始化時被調(diào)用。可以在AppModule類的providers中以factory的形式來配置。適合加載簡單的數(shù)據(jù)或簡單的校驗。
??factory是一個返回值為promise的函數(shù)。

示例

??在應(yīng)用啟動階段利用jwt校驗登錄信息是否有效
load.service.ts

import {Injectable, Injector} from "@angular/core";
import {JwtHelperService} from "@auth0/angular-jwt";
import {Observable, of} from "rxjs";
import {Router} from "@angular/router";

@Injectable({
  providedIn: "root"
})
export class LoadService {

  constructor(private jwtHelper: JwtHelperService,
              private injector: Injector) {
  }

  load(): Promise {
    return new Promise((resolve, reject) => {
      return this.checkUser()
        .subscribe(res => {
          if (res) {
            setInterval(() => {
              this.checkStatus();
            }, 1000 * 300);
          } else {
            this.goLogin();
          }
          resolve(res);
        }, err => {
          reject(err);
        });
    });
  }

  isTokenExpired(token: string = "access_token") {
    const jwtStr = localStorage.getItem(token);
    return jwtStr ? this.jwtHelper.isTokenExpired(jwtStr) : true;
  }

  checkUser(token: string = "access_token"): Observable {
    if (!this.isTokenExpired()) {
      return of(true);
    } else {
      localStorage.removeItem(token);
      return of(false);
    }
  }

  checkStatus() {
    if (this.isTokenExpired()) {
      this.goLogin();
    }
  }

  goLogin() {
    const router = this.injector.get(Router);
    router.navigate(["/user/login"]);
  }

}

app.module.ts

export function loadFactory(loadService: LoadService): Function {
  return () => loadService.load();
}

@NgModule({
  providers: [
    {
      provide: APP_INITIALIZER,
      useFactory: loadFactory,
      deps: [LoadService, Injector],
      multi: true
    }
  ]
})

???問道Angular系列???

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/99078.html

相關(guān)文章

  • [譯] 監(jiān)聽 Angular 啟動過程

    摘要:比如下面代碼讓初始化延遲秒執(zhí)行當(dāng)然你可以定義多個回調(diào)函數(shù)另外一個可以監(jiān)聽程序啟動過程的地方就是使用方法這里你可以拿到被啟動模塊的對象引用,并通過該對象拿到和。 原文鏈接: Hooking into the Angular bootstrap process Angular 提供了一些機(jī)制來監(jiān)聽框架初始化過程,本文主要探索如何使用這些機(jī)制。 APP_BOOTSTRAP_LISTENER...

    cjie 評論0 收藏0
  • 我理解的 core 目錄

    摘要:只需引入一次的什么是項目中只需要引入一次的舉個例子,全局錯誤處理根路由數(shù)據(jù)預(yù)加載請求攔截器等。更漂亮的是為我們提供了攔截器接口,我們只管開發(fā)攔截器邏輯功能,調(diào)用及使用全部控制權(quán)都在框架內(nèi)。 ... 過了一遍 Angular 文檔 的小伙伴大致都會記得最佳實踐中提到過的有關(guān)CoreModule的一些解釋和說明,其實關(guān)于名字的命名不是強(qiáng)制性的,只要團(tuán)隊中一致 pass,你把它命名為XXXM...

    callmewhy 評論0 收藏0
  • 問道Angular——Angular刷新當(dāng)前頁面

    摘要:默認(rèn)情況下,路由器將會忽略這次導(dǎo)航。但這樣會阻止類似于刷新按鈕的特性。使用該選項可以配置導(dǎo)航到當(dāng)前時的行為。使用配置實際上不會重新加載路由,只是重新出發(fā)掛載在路由器上的事件。配置有三個值僅在路由參數(shù)更改時觸發(fā)。 onSameUrlNavigation ??從angular5.1起提供onSameUrlNavigation來支持路由重新加載。、 ??有兩個值reload和ignore。默...

    RyanHoo 評論0 收藏0
  • 問道Angular——Angular設(shè)置別名alias

    摘要:設(shè)置別名在根目錄下中添加和訪問環(huán)境變量添加了別名,以便能夠從應(yīng)用程序中的任何位置輕松訪問環(huán)境變量。它適用于所有指定的環(huán)境,因為它會根據(jù)傳遞給命令的標(biāo)志自動解析正確的環(huán)境文件。 設(shè)置別名 ??在根目錄下tsconfig.json中添加baseUrl和paths { compilerOptions: { baseUrl: src, paths: { @app...

    Neilyo 評論0 收藏0
  • 問道Angular——Angular5/6/7項目添加熱更新(HMR)功能

    摘要:提供以上熱更新功能使用初始化項目命令行進(jìn)入該目錄啟動項目將附帶功能。 ??提供angular6以上HMR(熱更新)功能 使用hmr-cli npm i -g hmr-cli ??初始化angular項目,命令行進(jìn)入該目錄 hmr init ??npm run hmr啟動項目將附帶hmr功能。 詳細(xì)配置如下: Angular6添加HMR environments目錄 environme...

    Aceyclee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<