APP_INITIALIZER是在Angular2.x程序启动之前执行的一个函数,可以在这个里面进行自动登录,判断登录token,阻止启动等一系列操作,可以在AppModule类的providers中以factory的形式来配置,factory是一个返回值为promise的函数。

import { BrowserModule } from '@angular/platform-browser';import { NgModule, APP_INITIALIZER } from '@angular/core';import { AppComponent } from './app.component';@NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule ], providers: [ { provide: APP_INITIALIZER, useFactory: initApp, deps: [HttpClient], multi: true } ], bootstrap: [AppComponent]})export class AppModule { }

下面我们看initApp的定义,注意一定要是返回值为Promise的函数

简单的一个Projmise例子export function initApp() { return () => { return new Promise((resolve, reject) => { setTimeout(() => { console.log('In initApp'); resolve(); //reject() 就会终止程序的启动 }, 3000); }); };}获取一种信息export function initApp(http: HttpClient) { return () => { return http.get('https://api.github.com/users/sagar-ganatra') .toPromise() .then((resp) => { console.log('Response 1 - ', resp); }); };}登录后获取一种信息export function initApp(http: HttpClient) { return () => { return http.get('login').toPromise() .then((resp) => { this.user = resp.user; return this.http.get('fileInfo').toPromise(); }); };}