欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Angular如何在應(yīng)用初始化時運行代碼詳解

 更新時間:2018年06月11日 10:33:37   作者:冠軍  
這篇文章主要給大家介紹了關(guān)于Angular如何在應(yīng)用初始化時運行代碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

想象一下,您的應(yīng)用需要一些動態(tài)配置信息,這些信息在應(yīng)用啟動之前需要動態(tài)獲取,并在應(yīng)用運行中使用。

顯然不能直接寫道靜態(tài)配置文件中,但是從客戶端發(fā)出的請求又是一個異步請求,如何協(xié)調(diào)這個問題呢?

這里,我想向您演示,如何在 Angular 應(yīng)用初始化期間,使用 APP_INITIALIZER 注入器來獲取應(yīng)用的動態(tài)配置信息。

什么是 APP_INITIALIZER 注入器

APP_INITIALIZER 是允許您在 Angular 初始化七千處理您自己任務(wù)的機制。它既可以用于 AppModule,核心模塊,也可以用于您自己的應(yīng)用加載模塊中。典型的場景是應(yīng)用加載之前做的事情,比如從服務(wù)處加載用于設(shè)置應(yīng)用的配置信息。在示例中,我們使用它從服務(wù)器的 XML 配置文件中加載應(yīng)用的設(shè)置信息。

創(chuàng)建 AppLoad 模塊

盡管不是必要,通過創(chuàng)建 App Load module 還是對應(yīng)用加載有助于隔離。

import { NgModule, APP_INITIALIZER } from '@angular/core';
import { HttpClientModule } from "@angular/common/http";
 
import { AppLoadService } from './app-load.service';
 
export function init_app(appLoadService: AppLoadService) {
 return () => appLoadService.initializeApp();
}
 
export function get_settings(appLoadService: AppLoadService) {
 return () => appLoadService.getSettings();
}
 
@NgModule({
 imports: [HttpClientModule],
 providers: [
 AppLoadService,
 { provide: APP_INITIALIZER, useFactory: init_app, deps: [AppLoadService], multi: true },
 { provide: APP_INITIALIZER, useFactory: get_settings, deps: [AppLoadService], multi: true }
 ]
})
export class AppLoadModule { }

注意一下幾點:

  • APP_INITIALIZER 導(dǎo)入自 @angular/core
  • 這里有多個 APP_INITIALIZER,它們在應(yīng)用初始化過程中并發(fā)執(zhí)行,直到它們?nèi)客瓿伞?br />   使用 nulti: true 用于多個注入器,如果只有一個,使用 multi: false。
  • 工廠函數(shù) init_app 和 get_settings 應(yīng)當(dāng)返回一個返回 Promise 的函數(shù)。
  • 該模塊必須添加到 AppModule 的導(dǎo)入數(shù)組中。

創(chuàng)建 App Load Service

AppLoadService 應(yīng)當(dāng)隔離您在應(yīng)用初始化期間的作為。當(dāng)然這不是必須的,您可以使用任何需要的服務(wù)。

這里實現(xiàn)了兩個方法我們在前面代碼中使用的方法。在我們的 AppLoadModule 中作為依賴注入到提供器數(shù)組中。

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import 'rxjs/add/operator/toPromise';
 
import { APP_SETTINGS } from '../settings';
 
@Injectable()
export class AppLoadService {
 
 constructor(private httpClient: HttpClient) { }
 
 initializeApp(): Promise<any> {
 return new Promise((resolve, reject) => {
   console.log(`initializeApp:: inside promise`);
 
   setTimeout(() => {
   console.log(`initializeApp:: inside setTimeout`);
   // doing something
 
   resolve();
   }, 3000);
  });
 }
 
 getSettings(): Promise<any> {
 console.log(`getSettings:: before http.get call`);
 
 const promise = this.httpClient.get('http://private-1ad25-initializeng.apiary-mock.com/settings')
  .toPromise()
  .then(settings => {
  console.log(`Settings from API: `, settings);
 
  APP_SETTINGS.connectionString = settings[0].value;
  APP_SETTINGS.defaultImageUrl = settings[1].value;
 
  console.log(`APP_SETTINGS: `, APP_SETTINGS);
 
  return settings;
  });
 
 return promise;
 }
}

注意以下幾點:

  • initializeApp 用于等待 3 秒,并輸出日志來顯示兩個方法是并行執(zhí)行的。
  • getSettings 調(diào)用一個模擬的我使用 APIARY 創(chuàng)建的 API 來或者設(shè)置。
      這里使用這些設(shè)置來設(shè)置 APP_SETTINGS 對象的
  • 它們都返回 Promise

運行應(yīng)用

運行應(yīng)用,可以在 Console 中查看如下輸出

注意:

  • 您可以看到兩個方法都被調(diào)用了。
  • 設(shè)置首先返回
  • initializeApp 最后完成,然后應(yīng)用啟動。

如何從 settings 中獲取 API 的地址?

有些人想:“如果沒有 settings 來知道 URL, 我如何調(diào)用 API 呢?”,這是一個問題,您可以通過一個相對 URL 來通過 HttpClient ,并假設(shè) API 在您的 Web 站點上。

參考資料

https://www.intertech.com/Blog/angular-4-tutorial-run-code-during-app-initialization/

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 詳解Angular 4.x NgTemplateOutlet

    詳解Angular 4.x NgTemplateOutlet

    這篇文章主要介紹了詳解Angular 4.x NgTemplateOutlet,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • angular2系列之路由轉(zhuǎn)場動畫的示例代碼

    angular2系列之路由轉(zhuǎn)場動畫的示例代碼

    本篇文章主要介紹了angular2系列之路由轉(zhuǎn)場動畫的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • ng-events類似ionic中Events的angular全局事件

    ng-events類似ionic中Events的angular全局事件

    這篇文章主要介紹了ng-events類似ionic中Events的angular全局事件,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • 詳解AngularJS 模態(tài)對話框

    詳解AngularJS 模態(tài)對話框

    在涉及GUI程序開發(fā)的過程中,常常有模態(tài)對話框以及非模態(tài)對話框的概念。接下來通過本文給大家介紹AngularJS 模態(tài)對話框 ,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • 詳解關(guān)于Angular4 ng-zorro使用過程中遇到的問題

    詳解關(guān)于Angular4 ng-zorro使用過程中遇到的問題

    這篇文章主要介紹了詳解關(guān)于Angular4 ng-zorro使用過程中遇到的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Angular在一個頁面中使用兩個ng-app的方法

    Angular在一個頁面中使用兩個ng-app的方法

    這篇文章主要介紹了Angular在一個頁面中使用兩個ng-app的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • 詳解AngularJS中的filter過濾器用法

    詳解AngularJS中的filter過濾器用法

    這篇文章主要介紹了AngularJS中的filter過濾器用法,包括其在模版中和在controller以及service的常見應(yīng)用場合,需要的朋友可以參考下
    2016-01-01
  • AngularJs 終極購物車(實例講解)

    AngularJs 終極購物車(實例講解)

    下面小編就為大家?guī)硪黄狝ngularJs 終極購物車的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • angularjs實現(xiàn)簡單的購物車功能

    angularjs實現(xiàn)簡單的購物車功能

    這篇文章主要為大家詳細介紹了angularjs實現(xiàn)簡單的購物車功能 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 使用AngularJS 應(yīng)用訪問 Android 手機的圖片庫

    使用AngularJS 應(yīng)用訪問 Android 手機的圖片庫

    這篇文章主要介紹了使用AngularJS 應(yīng)用訪問 Android 手機的圖片庫的相關(guān)資料,需要的朋友可以參考下
    2015-03-03

最新評論