英雄巡视搜索组件(如果可观察的为空)

时间:2018-10-01 17:18:32

标签: angular

我创建了《英雄之旅》,并且有效。

但是我尝试“升级”部分代码,但我做不到。

在hero.service.ts代码中,您具有以下有关搜索的代码部分:

* GET heroes whose name contains search term */

searchHeroes(term: string): Observable<Hero[]> {
   if (!term.trim()) {
        // if not search term, return empty hero array.
      return of([]);
   }
   return this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`).pipe(
   tap(_ => this.log(`found heroes matching "${term}"`)),
   catchError(this.handleError<Hero[]>('searchHeroes', []))
   );
}

我的问题是:如果我搜索不存在的诸如“ gol”之类的信息,rteurned消息是:找到与“ gol”匹配的英雄

错误我没有找到英雄。

那么我该如何验证我的可观察对象是否为空?

我尝试一些东西

 private hero = new Observable<Hero[]>(); 
    searchHeroes(term: string): Observable<Hero[]> {
this.hero = this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`);
 if (!term.trim()) {
      // if not search term, return empty hero array.
      return of([]); //Seulement si le champ recherche est vide, pas si le retour est vide
    }
    this.hero = this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`);


    console.log(term, this.hero, Hero.length);
    if (this.hero !=0) {
      return this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`).pipe(
        tap(_ => this.log(`NO heroes matching "${term}"`)),
        catchError(this.handleError<Hero[]>('searchHeroes', []))
      );
    }else{
      return this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`).pipe(
        tap(_ => this.log(`found heroes matching "${term}"`)),
        catchError(this.handleError<Hero[]>('searchHeroes', []))
      );
      }
  }

它不起作用。那么如何管理可观察对象以了解其是否为空?

谢谢

1 个答案:

答案 0 :(得分:3)

可观察到http.get 的返回值。一个完全有效的。因此,检查 observable 是否为0,null等无效,因为它是有效对象。您想要做的是调整处理程序中的逻辑以观察可观察到的辐射。

在这种情况下,如果您想在不返回任何结果时记录其他内容,则可以调整tap处理程序(tap是“在观察到的对象发出时也执行此操作”),尽管您可以还可以在subscribe处理程序中检查此内容。像这样:

if (!term.trim()) {
    // if not search term, return empty hero array.
  return of([]);
}
return this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`).pipe(
tap(result => {
   if (result.length > 0) {
       this.log(`found heroes matching "${term}"`)
   } else {
       this.log('no matching heroes found');
   }
}),
catchError(this.handleError<Hero[]>('searchHeroes', []))