startWith('')打字稿代码有什么作用?

时间:2018-01-26 16:20:42

标签: angular typescript angular-material angular-material-5

我正在使用Typescript学习Angular 5。我正在尝试实现一个角度材质自动完成,我发现以下代码对我来说非常困难:

this.filteredStates = this.stateCtrl.valueChanges
  .pipe(
    startWith(''),
    map(state => state ? this.filterStates(state) : this.states.slice())
  );

完整代码可在此处找到:https://stackblitz.com/angular/mdokmnyajmd?file=app%2Fautocomplete-overview-example.ts

我倾向于认为当stateCtrl发生更改时,当且仅当在自动完成中选择了具体元素时,它才会返回filterStates(state)结果。

我不明白的是使用startWith('')?为什么不在valueChanges上简化调用订阅?

1 个答案:

答案 0 :(得分:6)

valueChanges最初不会发出任何值(直到状态 实际更改 )。当你需要从初始状态计算某些东西时,你使用startWith来使observable发出一个值,即使它不正常。

如果要在没有startWith的情况下处理初始值,可以创建另一个流

Observable.of(stateCtrl.value).pipe(
  map(state => state ? this.filterStates(state) : this.states.slice())
);

只会发出一个值。但同时处理这两种情况更容易,因此startWith是一种很好的方法......