您可以定义一个专用的提供程序来提供这些提示。例如:
bootstrap(AppComponent, [
(...)
provide('configuration', {
useValue: {
apiBaseUrl: 'http://localhost:4000'
}
}
]);
当您将代码打包用于生产时,可以使用配置文件替换包含此代码的文件。
为了考虑到这个配置,可以扩展
RequestOptions
类,以在所有请求前添加
apiBaseUrl
前缀:
import {
BaseRequestOptions, RequestOptions, RequestOptionsArgs
} from 'angular2/http';
export class AppRequestOptions extends BaseRequestOptions {
constructor(private @Inject('configuration') configuration:any) {
}
merge(options?:RequestOptionsArgs):RequestOptions {
options.url = this.configuration.apiBaseUrl + options.url;
return super.merge(options);
}
}
在启动应用程序时不要忘记配置请求选项:
bootstrap(AppComponent, [
(...)
provide('configuration', {
useValue: {
apiBaseUrl: 'http://localhost:4000'
}
}
provide(RequestOptions, { useClass: AppRequestOptions })
]);
这个处理过程可以放在一个专门的JS文件中,该文件可以使用gulp和gulp-html-replace等工具来替换构建过程中的文件。
参考此问题:
对于最后一步,您还可以根据配置文件异步加载应用程序。
var injector = Injector.resolveAndCreate([HTTP_PROVIDERS]);
var http = injector.get(Http);
http.get('config.json').map(res => res.json())
.subscribe(data => {
bootstrap(AppComponent, [
HTTP_PROVIDERS
provide('config', { useValue: data })
]);
});
更多详情请参考以下问题:
environment.ts
和environment.prod.ts
文件。其中一个文件将根据您使用的是ng build --dev
还是ng build --prod
命令注入到应用程序中。 - yannick1976