Мой поиск реализован в Angular с использованием асин c канала с наблюдаемой. Я назначаю наблюдаемое поисковому виду, выполненному с помощью switchmap. Но это не работает! Я думаю, что это связано с тем, что одно назначение перезаписывает другое. Но мне нужно, чтобы некоторые данные отображались перед началом поиска (а кто нет). Я попытался отменить их, сначала назначив данные, а затем выполнить поиск, но затем данные не отображаются, и это работает только тогда, когда я начинаю печатать.
Итак, мой вопрос: как я могу это исправить, чтобы я мог использовать функцию поиска и при этом отображать некоторые данные в начале. Использование asyn c pipe и отсутствие подписки в компоненте
и сценарий, чтобы сделать его более понятным> При инициализации компонента я хочу сделать запрос к серверу и получить начальные данные для его отображения. А также «назначение» того же самого наблюдаемого на вход, где пользователь вводит критерии для поиска, делая еще один запрос к серверу.
Любая помощь приветствуется
Аналогичный вопрос, но нет конкретного ответа и устаревшие rx js операторов
Angular2 - получить данные из службы при инициализации с помощью Switchmap
queryField: FormControl;
customerOrdersObservable: Observable<NextCustomerOrdersPaginationModel>;
ngOnInit() {
this.customerOrdersObservable = this.queryField.valueChanges.pipe(
debounceTime(500),
distinctUntilChanged(),
switchMap((searchInput) => {
this.transformSearchInput(searchInput);
return this.customerOrderService.getSearchedCustomerOrders(this.page, this.pageSize, this.searchTerm);
}));
this.customerOrdersObservable = this.customerOrderService.getSearchedCustomerOrders(
this.page, this.pageSize, this.searchTerm);
}
Изменить на
ngOnInit() {
this.customerOrdersObservable = this.queryField.valueChanges.pipe(
startWith(this.customerOrderService.getSearchedCustomerOrders(
this.page, this.pageSize, this.searchTerm)), > 'would have been great but its not possible (unless im wrong)'
debounceTime(500),
distinctUntilChanged(),
switchMap((searchInput) => {
this.transformSearchInput(searchInput);
return this.customerOrderService.getSearchedCustomerOrders(this.page, this.pageSize, this.searchTerm);
}));
}