Убираем это из комментариев, чтобы я мог показать код. Вместо использования emit в том виде, в каком он у вас есть, вы можете создать службу, которая генерирует наблюдаемый объект с последним фильтром, на который может подписаться любой компонент.
Предупреждение: это не проверенный код.
This служба использует rx js Subject, который отправит последнее значение подписчику. Вы подписываетесь на наблюдаемый «фильтр» и вызываете метод setFilter для установки значения.
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class FilterService {
private _filter = new Subject<ITabFilter>();
filter = this._fiter.asObservable();
constructor() { }
public setFilter(filter: ITabFilter): void {
this._filter.next(filter);
}
}
Вы вызываете setFilter, как это, везде, где часть вашего кода знает последний фильтр.
...
filter: ITabFilter;
...
constructor(private filterSvc: FilterService) {}
...
this.filterSvc.setFilter(this.filter)
А там, где необходимы данные фильтра, вы можете подписаться на наблюдаемое, вот так
filter: ITabFilter;
constructor(private filterSvc: FilterService) {}
...
this.filterSvc.filter
.subscribe(filter => {
this.filter = filter;
}, (error) => {
console.log(error);
});