Обычно у вас есть две вещи
private searchTerm = new Subject<string>();
observableSearchTerm=this.searchTerm.asObservable()
Вы делаете «следующий» по searchTerm, но подписываетесь на наблюдаемый
onKeyUpSearch(searchText: string){
if (searchText !== "") this.searchTerm.next(searchText);
}
//But subscribe to the "Observable"
this.observableSearchTerm
.debounceTime(100)
.distinctUntilChanged()
.switchMap(term => this.apiService.getSearchTest(term))
.subscribe(result => {
...
}
ПРИМЕЧАНИЕ 1. В RxJs 6 (Angular 6),Вы должны изменить код, используя pipe
this.observableSearchTerm.pipe(
debounceTime(100),
distinctUntilChanged(),
switchMap(term => this.apiService.getSearchTest(term))
).subscribe(result => {
...
}
ПРИМЕЧАНИЕ 2. Вы можете использовать FromControl и подписаться непосредственно на изменения значений
//In .html
<input type="text" [formControl]="control">
//In .ts
control:FormControl=new FormControl() //Define the control
//..after in ngOnInit
ngOnInit()
{
this.control.valueChanges.pipe(
debounceTime(100),
distinctUntilChanged(),
switchMap(term => this.apiService.getSearchTest(term)
).subscribe(result=>{
....
})
}
См. stackblitz