我已经创建了服务ServiceA
和ComponentA
。 ServiceA
需要订阅queryParams
的ActivatedRoute
,但我想有条件地这样做,并且条件是提供给ComponentA
的解析器数据。
我的解决方法是检查onInit
的ComponentA
中的条件,并根据此条件将ServiceA
订阅到queryParams
。但是,我最初想在服务的构造函数中订阅queryParams
,然后以某种方式注入数据。你怎么看?谢谢。
class ServiceA {
constructor (private _route: ActivatedRoute) {}
subscribeToQueryParams() {
this._route.queryParams
.subscribe(params => {
...
});
}
}
class ComponentA implements OnInit {
constructor (private serviceA: ServiceA, private _route: ActivatedRoute) {}
ngOnInit() {
this._route.data.subscribe(condition => {
if(condition) {
this.serviceA.subscribeToQueryParams();
}
});
}
}
我建议您使用rxjs并避免进行订阅。
例如,您可以执行以下操作
class ComponentA implements OnInit {
constructor (private serviceA: ServiceA, private _route: ActivatedRoute) {}
ngOnInit() {
this._route.data.pipe(
switchMap(condition => {
if(condition) {
this.serviceA.subscribeToQueryParams();
}
})
);
}
}