我在controller.ts的ngOnInit
中订阅了一种方法。从视图中,有一个选项可以从列表中选择其他用户,该用户将重定向到同一页面,只是URL的ID会更改。因此ngOnInit
被多次调用。因此,方法被多次订阅。我们多次选择不同的用户方法来为所选成员的每个号码调用,即如果我们选择3个用户,而另一条路由被更改3次,则当可观察到的结果被方法调用3次。但是如果刷新页面一切正常。但是如果我在ngDestroy
中使用了unsubscribe,那么它将不会在ngOnInit
中再次被订阅。有什么解决办法吗?
ngOnInit() {
this._myService.detailsReceived.subscribe((obj: details) =>
{console.log(obj.text)}
);
}
同一页面上的路线更改为
this.route.navigate(['user-home', userid]);
我要求此方法保持订阅状态,直到用户注销为止,因此不能使用subscribe.Take(1)
答案 0 :(得分:3)
但是如果我在ngDestroy中使用了unsubscribe,那么它将不会在ngOnInit中再次被订阅
来自评论:
ngOnDestroy() { this._myService.detailsReceived.unsubscribe(); }
我用了这个。退订方式错误吗?
您没有正确取消订阅。您必须退订Subscription
,不退订Observable
。取消订阅可观察的行为将完全导致您描述的行为。
// import
import { Subscription } from 'rxjs';
///////
// In the component
detailRecivedSubscription: Subscription;
ngOnInit() {
this.detailRecivedSubscription = this._myService.detailsReceived.subscribe((obj: details) =>
{console.log(obj.text)}
);
}
ngOnDestroy() {
this.detailRecivedSubscription.unsubscribe();
}
在这种情况下,在/根级组件中订阅此服务也可能更有意义。