从http Observable创建一个BehaviorSubject

时间:2019-08-27 12:49:36

标签: angular rxjs

我正在通过http客户端获取数据,我如何以BehaviorSubject而不是Observable的形式返回值?我有一个订阅,即definitions$在异步模板中可观察到。现在,我要检查ngClass中的定义是否为空,因此需要BehaviorSubject来完成此操作。

definitions$: Observable<ObjectDefinition[]>;

// ...

return this.http.get('http://localhost:8080/api/search?term=abc')
              .pipe(
                map(result => {
                  console.log(result);
                  return result['body'];
                })
              );

模板

<input [ngClass]="{'input-has-results': trueIfDefinitionsLength > 0}"
       [formControl]="searchInput">

<ng-container *ngIf="definitions$ | async as definitions">
  <div class="format-options" *ngIf="definitions.length > 0">
    <div *ngFor="let definition of definitions" class="search-result">
      <div>{{definition.name}}</div>
      <div>{{definition.description}}</div>
    </div>
  </div>
</ng-container>

组件使用可观察的http://

this.definitions$ = this.searchInput.valueChanges
                        .pipe(
                            tap(value => console.log('input')),
                            //startWith(''),
                            debounceTime(500),
                            //distinctUntilChanged(),
                            switchMap(value => this.definitionService.searchTerm(value))
                        );

0 个答案:

没有答案