У меня есть угловой компонент, который извлекает данные из службы с service.getItems
.Иногда сервисный вызов прост, в других случаях требуется фильтр.Этот фильтр можно установить с помощью свойства компонента filter
.
. Я убежден, что мне что-то не хватает в принципе, но я не могу заставить его работать должным образом.Либо я могу заставить его принять фильтр, либо игнорировать фильтр, но не реагировать на его наличие.
Есть предложения изменить код, приведенный ниже, чтобы он действительно работал?
@Component({}
selector: 'my-component',
template: `
<!-- Items are shown async -->
{{ items | async }}
`
})
export class MyComponent {
//////////////////////////////////////////////////////////////////
// Initialize the filter observable with a null value
//////////////////////////////////////////////////////////////////
constructor(private service) {
this.filter = null;
}
//////////////////////////////////////////////////////////////////
// Filter observable to hookup the filter value to the service
//////////////////////////////////////////////////////////////////
filter$: Subject<Filter> = new Subject<Filter>();
//////////////////////////////////////////////////////////////////
// Service call to fetch items
//////////////////////////////////////////////////////////////////
items$: Observable<any[]> = this.filters$.pipe(
switchMap(filter => this.service.getItems(filter));
);
//////////////////////////////////////////////////////////////////
// Allow filter with
// <my-component [filter]="myFilter">
//////////////////////////////////////////////////////////////////
@Input()
set filter(filter: Filter) {
this.filter$.next(filter);
}
}