Свойство DifferentUntilChanged () не существует для типа MonoTypeOperatorFunction <{}> Rxjs6 - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь создать поисковый сервис для поиска в реальном времени при вводе. я имею 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

1 Ответ

0 голосов
/ 28 августа 2018

Ваш звонок на pipe неверный. Операторы в трубе должны быть разделены, а не объединены .:

return terms.pipe(debounceTime(400),
  distinctUntilChanged(),
  switchMap(term => this.searchEntries(term)));
...