Как передать полученные данные в сервис? - PullRequest
0 голосов
/ 04 апреля 2020

Я создал сервис 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();
       }
     });
   }
}

1 Ответ

0 голосов
/ 05 апреля 2020

Я бы предложил вам использовать rx js и избегать подписок.

Например, вы можете сделать что-то вроде этого

class ComponentA implements OnInit {
  constructor (private serviceA: ServiceA, private _route: ActivatedRoute) {}

  ngOnInit() {
   this._route.data.pipe(
     switchMap(condition => {
        if(condition) { 
          this.serviceA.subscribeToQueryParams();
        }
    })
   );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...