我正在使用Angular2 RC5.我希望能够在我的应用程序启动之前加载我的服务器IP地址和一些其他配置参数.我怎样才能在最新的RC5中做到这一点?
我看过其他文章,但它们没有帮助:
任何帮助将不胜感激.
编辑
我尝试在app.module.ts中使用APP_INITIALIZER,如下所示:
import { NgModule, provide, APP_INITIALIZER } from "@angular/core";
import { ConfigService } from "./shared/services/config.service";
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule,
routes,
FormsModule,
HttpModule],
providers: [AuthService,
Title,
appRoutingProviders,
ConfigService],
bootstrap: [AppComponent
, provide(APP_INITIALIZER,
{
useFactory: (config: ConfigService) => () => config.load(),
deps: [ConfigService], multi: true
})]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)
这是我的config.service.ts文件:
import { Config } from "../model/config";
export class ConfigService {
constructor() {
}
load(): Promise<Config> {
let config: Config …Run Code Online (Sandbox Code Playgroud) 我正在使用APP_INITIALIZER,就像在这个答案中推荐的那样,我的服务返回一个承诺,但它并不总是等待它解决,我可以看到我的组件console.logging未定义,然后服务记录下载的对象.
我需要应用程序在加载此数据之前不做任何事情.
app.module.ts
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { Http, HttpModule, JsonpModule } from '@angular/http';
import { UserService } from '../services/user.service';
<...>
@NgModule({
imports: [
BrowserModule,
HttpModule,
FormsModule,
JsonpModule,
routing
],
declarations: [
AppComponent,
<...>
],
providers: [
<...>
UserService,
{provide: APP_INITIALIZER,
useFactory: (userServ: UserService) => () => userServ.getUser(),
deps: [UserService, Http],
multi: true
}
],
bootstrap: [AppComponent]
Run Code Online (Sandbox Code Playgroud)
user.service.ts
@Injectable()
export class UserService {
public user: User;
constructor(private http: Http) { }
getUser(): Promise<User> { …Run Code Online (Sandbox Code Playgroud) 在我的主要组件的ngOnInit中,我确实得到了一些全局设置:
ngOnInit() {
this._service1.initGlobalData()
this._service2.initGlobalData2()
}
Run Code Online (Sandbox Code Playgroud)
这两个调用初始化_service1和_service2,然后在我的应用程序的几个不同的地方使用.我想确保在开始渲染我的应用程序之前完成这两个调用.
在Angular 2中有没有具体的方法呢?
我想到的唯一解决方案是根据这两个init调用返回的promise设置一个微调器.
我正在使用在AppModule中导入的MsAdalAngular6Module,我需要能够在运行时从外部json文件提供配置值:
@NgModule({
declarations: [AppComponent, HeaderComponent, SidebarComponent],
imports: [
CommonModule,
BrowserModule,
HttpClientModule,
MsAdalAngular6Module.forRoot( {tenant: config.tenantId,
clientId: config.clientId,
redirectUri: window.location.origin,
endpoints: {
string: ''
},
navigateToLoginRequestUrl: false,
cacheLocation: 'localStorage'}),
AppRoutingModule
Run Code Online (Sandbox Code Playgroud)
我正在Docker中使用多阶段构建和nginx运行它。理想情况下,我希望此模块配置的默认值来自环境文件,但应在运行时由外部json文件中的值取代。
我已经看到了几种解决方法,包括Angular 2:befor bootstrap之前的外部配置-将值传递给AppModule,但是在导入和配置MsAdalAngular6模块之前,我似乎永远无法将值提供给app.module。