Я недавно обновился до Angular 6 и rxjs 6, после обновления следующий код для динамической установки заголовка страницы больше не работает
ngOnInit(): void {
this.router.events
.filter((event) => event instanceof NavigationEnd)
.map(() => this.activatedRoute)
.map((route) => {
while (route.firstChild) {
route = route.firstChild;
};
return route;
})
.filter((route) => route.outlet === 'primary')
.mergeMap((route) => route.data)
.subscribe((event) => this.titleService.setTitle(event['title']));
};
Это дает мне ошибку
this.router.events.filter is not a function
Я пробовал обернуть фильтр в трубу, как
this.router.events
.pipe(filter((event) => event instanceof NavigationEnd))
Но я получаю ошибку
this.router.events.pipe(...).map is not a function
Я импортировал фильтр вроде
import { filter, mergeMap } from 'rxjs/operators';
Что мне здесь не хватает?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это правильный способ использования конвейерные / lettables.
this.router.events.pipe(
filter(event => event instanceof NavigationEnd),
map(() => this.activatedRoute),
map((route) => {
while (route.firstChild) {
route = route.firstChild;
};
return route;
}),
filter((route) => route.outlet === 'primary'),
mergeMap((route) => route.data),
).subscribe((event) => this.titleService.setTitle(event['title']));
В RxJs 6 все операторы являются конвейерными, что означает, что они должны использоваться внутри вызова метода конвейера. Подробнее об этом здесь.
Итак, код, который у вас есть, должен выглядеть примерно так:
this.router.events.pipe(
filter((event) => event instanceof NavigationEnd),
map(() => this.activatedRoute),
map((route) => {
while (route.firstChild) {
route = route.firstChild;
};
return route;
}),
filter((route) => route.outlet === 'primary'),
mergeMap((route) => route.data)
).subscribe((event) => this.titleService.setTitle(event['title']));
Если у вас есть более крупное приложение, я предлагаю вам взглянуть на проект rxjs-tslint, поскольку он позволит вам автоматически обновлять код.
Спасибо, @Adraian Faciu, и спасибо за дополнительные знания, которыми вы делитесь: D Мне это было нужно.
Спасибо @Joshua Chan, это сработало, и еще раз спасибо за ссылку