【发布时间】:2016-07-23 02:07:59
【问题描述】:
我有一个 Angular 2 服务,它在初始化时需要执行异步工作,并且在初始化完成之前不应该可用。
@Injectable()
export class Api {
private user;
private storage;
constructor(private http: Http) {
this.storage = LocalStorage;
this.storage.get('user').then(json => {
if (json !== "") {
this.user = JSON.parse(json);
}
});
}
// one of many methods
public getSomethingFromServer() {
// make a http request that depends on this.user
}
}
就目前而言,此服务已初始化,并立即返回给使用它的任何组件。然后该组件在其ngOnInit 中调用getSomethingFromServer(),但此时Api.user 未初始化,因此发送了错误的请求。
生命周期挂钩(OnInit、OnActivate 等)不适用于服务,只能用于组件和指令,所以我不能使用它们。
从get()调用存储Promise将需要依赖于用户的所有不同方法等待它,导致大量代码重复。
在 Angular 2 中进行服务异步初始化的推荐方法是什么?
【问题讨论】:
-
在某些情况下使用
APP_INITIALIZER可能是一种方法,例如如果您希望只调用一次 init,请在此处查看示例 stackoverflow.com/questions/49686406/… 我知道您的 q 已经回答,但这可能对将来的参考有用
标签: typescript angular angular2-services