我认为,如果我们使用@Input进行这样的初始化,您可能无法在初始化时获得值,为了安全起见,您可以在
ngOnInit
.
另外请注意:当组件初始化时,gridData应该有一个值,只有这样它才能工作!
export class RecordSearchComponent implements OnDestroy {
@Input() gridData: Observable<TrainingRecord[]> = of([]);
private filterSubject = new BehaviorSubject<string>('');
private readonly debounceTimeMs = 300;
filteredData$!: Observable<TrainingRecord[]> = of([]);
private filterInput$ = this.filterSubject.pipe(
debounceTime(this.debounceTimeMs),
distinctUntilChanged(),
)
ngOnInit() {
this.filteredData$ = combineLatest([this.filterInput$, this.gridData]).pipe(
tap(([filter, data]) => console.log(filter, data)),
switchMap(([filter, data]) => {
if (filter === '' || filter === null) {
return of(data);
}
const filterDescriptor = {
field: 'nameFull',
operator: 'contains',
value: filter,
ignoreCase: true,
};
return of(filterBy(data, filterDescriptor));
})
);
}
ngOnDestroy(): void {
this.filterSubject.complete();
}
onFilter() {
this.filterSubject.next(this.inputText);
}
}