Точка № 1: Мне кажется странным иметь такие переменные-члены:
Лично я предпочитаю следующий синтаксис и также видел его в более крупных проектах:
export class foo {
private foo$$ = new BehaviorSubject(false);
public foo$ = this.foo$$.asObservable();
}
$$ для Субъектов и других наблюдаемых взаимодействий, $ для чистых Наблюдаемых, на которые можно подписаться
Точка № 2: Подписаться внутри Сервиса
Ваш сервис не будет иметь ngOnDestroy (, только если вы предоставите его только для одного компонента ), поэтому не только из-за этого, но, пожалуйста, не подписывайтесь на наблюдаемые объекты внутриуслуги .Вы можете сделать это, но, следовательно, вам нужно глубже понять, как сервисы работают и как они работают в модулях.
Точка № 3: Где подписаться и как?
Ну, теперь ваш сервис должен предоставить одну или несколько общедоступных читаемых заметок, которые уже сопоставлены / отфильтрованы / .... и готовы к подписке - .Таким образом, вы можете позволить сервису внедряться в компонент по вашему выбору ( место, где вам нужны данные ).Тогда в компоненте есть два способа управления подписками / отписками.
Я не уверен, что этот вариант доступен для rxjs 5.5, но давайте попробуем:
class foo {
private subscription = new Subscription();
constructor(private yourService: YourService) {}
ngOnInit() {this.subscriptions.add(this.yourService.observable$.subscribe(val =>
console.log(val)}
ngOnDestroy() {this.subscriptions.unsibscribe()}
}
Более длинный, но более старый путь
Для каждого Observalbe создайте частный экземпляр Subscription
private observableSubscription;
constructor(...){}
ngOnInit() {this.observableSubscription = yourService.observable$.subscribe(...)}
ngOnDestroy() {this.observableSubscription.unsubscribe()}