订阅方法多次获取呼叫Angular 5

时间:2018-10-17 09:23:12

标签: angular angular5 observable angular2-routing subscribe

我在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)

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();
}

在这种情况下,在/根级组件中订阅此服务也可能更有意义。