Способ вызова операторов, например map
или filter
, изменился в RxJs 6, который используется Angular 6. Google найдет для вас множество руководств, которые объяснят все изменения, но это поможет вам начать.
Вы уже используете switchMap
правильный путь, и вам нужно просто продолжать это делать.
В RxJs 5 вы бы вызывали операторов напрямую, например:
someObservable
.map(item => doSomethingWith(item))
.filter(item => isThisItemValid(item));
И так далее.
Начиная с RxJs 6, вы все их транслируете.Так что мой псевдокод выше превращается в:
someObservable
.pipe(map(item => doSomethingWith(item)))
.pipe(filter(item => isThisItemValid(item)));
Точно такой же код, просто оберните их в вызовы pipe
.
Другое важное изменение - то, откуда вы их импортируете.Все операторы (может быть, только большинство?) Импортированы из rxjs/operators
, поэтому для использования map
, switchMap
и filter
вы должны включить это в начало вашего файла:
import { map, switchMap, filter } from 'rxjs/operators';
Я не знаю точно, что вы хотели сделать в своем примере кода, но вы можете просто добавить дополнительные pipe
вызовы в конец того, что у вас есть:
ngOnInit() {
this.dataSourceFiltered$ = this._route.paramMap.pipe(
switchMap(params => {
this.selectedId = +params.get("id");
this.dataSource$ = this._datasourceService.getAllDataSources();
this.dataSource$.subscribe(ds => (this.dataSourceList = ds));
return this.dataSource$;
})
)
.pipe(filter(item => filterItHere(item)))
.pipe(map(item => mapItHere(item)));
}