Я пытаюсь создать поисковый сервис для поиска в реальном времени при вводе. я имею
search.service.ts
:
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs';
import { map, debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class SearchService {
baseUrl: string = 'https://api.cdnjs.com/libraries';
queryUrl: string = '?search=';
constructor(private http: Http) { }
search(terms: Observable<string>) {
return terms.pipe(debounceTime(400)
.distinctUntilChanged()
.switchMap(term => this.searchEntries(term)));
}
searchEntries(term) {
this.http.get(this.baseUrl + this.queryUrl + term).pipe(map(res => {
res.json();
}))
}
}
и
app.component.ts
:
import { Component } from '@angular/core';
import { SearchService } from './search.service';
import { Subject } from 'rxjs/Subject';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [SearchService]
})
export class AppComponent {
results: Object;
searchTerm$ = new Subject<string>();
constructor(private searchService: SearchService) {
this.searchService.search(this.searchTerm$)
.subscribe(results => {
this.results = results.results;
});
}
}
Я сталкиваюсь с проблемой в search.service.ts
Свойство DifferentUntilChanged () не существует для типа MonoTypeOperatorFunction <{}> . Как я могу это исправить? Пожалуйста, дайте предложения.
EDITED
Код ниже исправил проблему.
search(terms: Observable<string>) {
return terms.pipe(debounceTime(400),
distinctUntilChanged(),
switchMap(() => interval(50), term => this.searchEntries(term)));
}
Вы можете посетить мой код для этого проекта на github