例如:
ngOnInit()
{
this.user = new User();
this.result = new Result();
this.route.params
.switchMap((params: Params) => this.user.id = params['id'])
.subscribe((user: User) => this.getUser());
}
getUser()
{
this.result.updateInfo("getting records...")
this.user.id = this.user.id.toLowerCase();
this._serivce.getUser(this.user.id).subscribe(userobj =>
{
this.user = userobj;
console.log(userobj);//five times
},error => this.result.updateError(error));
}
useronj在控制台中打印五次。 服务:
getUser(id: string) {
return this.http.get(<url>, { headers: this.headers })
.map(this.extractData)
.catch(this.handleError);
}
更新:只有ngOnInit调用getUser,这也只调用一次!
答案 0 :(得分:0)
您使用switchMap
的原因是否正确?您也在那里进行大量订阅,这可能会导致问题。你想要实现的目标,似乎是通过id参数获取用户,所以这应该可以解决问题:
ngOnInit() {
this.route.params
.subscribe(params => {
let id = params['id'];
this._service.getUser(id.toLowerCase())
.subscribe(userobj => {
console.log(userObj);
});
});
}
编辑:作为旁注,来自OP的评论(因为评论往往不被注意)原来在这种情况下switchMap
是唯一的问题。所以我怀疑所有订阅可能是这个问题的另一个原因,结果证明不是真的:)