我不知道是否应该为此发布任何代码。但如果需要的话我会的。我有一个 Angular2 指令,MyDirective
和一项服务MyService
该服务在其构造函数中进行 http 调用以获取某些内容并存储在其中this.list
.
指令注入服务并将其用作myService.isPresent(item)
.
现在的问题是,当指令执行时,用于获取服务中列表的 http 调用尚未完成。有没有一种干净的方法让指令等待服务准备好?
不,由于 http 调用始终是异步的,因此您无法同步等待它们。
但是,您可以使用以下方法实例化该服务ReflectiveInjector
您自己并在引导应用程序之前调用初始化以确保所有内容都已加载。
In the bootstrap
致电只需提供您的MyService
实例与数据。
//import ... from ...
import {MyService} from './my.service';
let injector = ReflectiveInjector.resolveAndCreate([HTTP_PROVIDERS, MyService]);
var myService: MyService = injector.get(MyService);
myService.init()
.subscribe(data => {
bootstrap(App, [
HTTP_PROVIDERS,
provide(MyService, {useValue: myService})
])
.catch(err => console.error("error: ", err));
});
In your MyService
添加这个init
方法返回一个Observable
为了您的数据加载:
init(): Observable<any> {
if (!this._initialized) {
this._initialized = true;
return this._http.get(this._url)
.map(data => {
this._data = data.json();
return this._data;
});
}
else {
console.log("Already initialized!");
}
}
Plunker有一个工作示例
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)