gpt4 book ai didi

Angularjs2 - 在应用程序启动前预加载服务器配置

转载 作者:太空狗 更新时间:2023-10-29 17:00:44 25 4
gpt4 key购买 nike

<分区>

我正在使用 Angular2 RC5。我希望能够在我的应用程序启动之前加载我的服务器 IP 地址和一些其他配置参数。我如何在最新的 RC5 中执行此操作?

我看过其他文章,但没有帮助:

  1. How to preload a config file in angular2 : 此处提供的答案是特定于 webpack 的。我正在使用 systemjs。
  2. https://medium.com/@hasan.hameed/reading-configuration-files-in-angular-2-9d18b7a6aa4#.m8lontnas :这是针对旧版本的 Angular2。一些使用的类已被弃用。

如有任何帮助,我们将不胜感激。

编辑

我尝试在我的 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 { }

这是我的 config.service.ts 文件:

    import { Config } from "../model/config";

export class ConfigService {
constructor() {
}

load(): Promise<Config> {
let config: Config = new Config("localhost", "5050");
return Promise.resolve(config);
}
}

请注意,我最终会重写加载以实际读取属性或某些此类文件以加载配置。

这是 config.ts 的样子:

export class Config {

constructor(
private machine: string,
private port: string
) {
}

private base_url: string = "http://" + this.machine +
this.port + "/";

public loginURL: string = this.base_url + "login";
}

编译出错

public/app/app.module.ts(27,11): error TS2345: Argument of type '{ declarations: (typeof AppComponent ...' is not assignable to parameter of type 'NgModuleMetadataType'.
Types of property 'bootstrap' are incompatible.
Type '(typeof AppComponent | Provider)[]' is not assignable to type '(Type | any[])[]'.
Type 'typeof AppComponent | Provider' is not assignable to type 'Type | any[]'.
Type 'Provider' is not assignable to type 'Type | any[]'.
Type 'Provider' is not assignable to type 'any[]'.
Property '[Symbol.iterator]' is missing in type 'Provider'.

编辑2

我继续下一步。更新 ConfigService 以使用 http.get 读取 json 文件。现在我得到一个错误。以下是更新后的文件:

export class ConfigService {
private config: Config;
constructor(private http: Http) {
}

load(): Promise<Config> {
this.http.get("/blah/config.json")
.map(res => res.json())
.subscribe((env_data) => {
console.log(env_data);
});
this.config = new Config("localhost", "5050");
return Promise.resolve(this.config);
}

getConfig(): Config {
return this.config;
}
}

这是 NgModule 类中的提供者部分

    providers: [AuthService,
Title,
appRoutingProviders,
ConfigService,
{
provide: APP_INITIALIZER,
useFactory: (config: ConfigService) => () => config.load(),
deps: [ConfigService, Http],
multi: true
}],

请注意,在 RC6 中我无法导入 HTTP_PROVIDERS,因为我得到的错误是它们不再在 http 模块中定义。这就是我尝试 Http 的原因。

在运行时,我得到以下错误

(index):27 Error: Error: Can't resolve all parameters for ConfigService: (?).(…)(anonymous function) @ (index):27
ZoneDelegate.invoke @ zone.js:332
Zone.run @ zone.js:225(anonymous function) @ zone.js:591
ZoneDelegate.invokeTask @ zone.js:365
Zone.runTask @ zone.js:265
drainMicroTaskQueue @ zone.js:497
ZoneTask.invoke @ zone.js:437

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com