我想从.json文件中读取服务的配置值。
这是我到目前为止所拥有的。最终配置值将进入日志,但不会在执行其余功能之前。
getService()
{
var service = new Service();
this.http.get('./config.json')
.map(res => res.json())
.subscribe(data => this.config = data,
err => console.log(err) );
service.ValueA = this.config.ValueA;
return service;
}
感谢您的帮助!
答案 0 :(得分:0)
您可以在应用程序启动时利用APP_INITIALIZER
服务预加载您的服务。应用程序将等待返回的promise在实际启动之前得到解决。
以下是一个示例:
bootstrap(AppComponent, [
{ provide: APP_INITIALIZER,
useFactory: (service:Service) => () => service.init(),
deps:[Service, HTTP_PROVIDERS], multi: true
}
]);
load
方法需要类似的东西:
@Injectable()
export class Service {
ValueA:string;
constructor(private http:Http) {
}
init() {
var promise = this.http.get('config.json').map(res => res.json()).toPromise();
promise.then(config => this.ValueA = config.ValueA);
return promise;
}
}
这样做,您将能够注入Service
服务,并直接使用ValueA
等配置属性。
以下是组件中的示例:
@Component({
(...)
providers: [ Service ]
})
export class SomeComponent {
constructor(private service:Service) {
console.log(`[config] ValueA = ${service.ValueA}`);
}
}