startWith('') 打字稿代码有什么作用?
What does startWith('') typescript code do?
我正在学习 Angular 5 使用 Typescript。我正在尝试实现 angular material 自动完成功能,我发现以下代码对我来说非常晦涩:
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 发生变化时,returns filterStates(state) 结果当且仅当在自动完成中选择了具体元素。
我不明白的是startWith('')的用法?!为什么不简化对 valueChanges 的调用订阅?
valueChanges
最初不会发出任何值(直到状态 实际改变 )。当你需要从初始状态计算某些东西时,你可以使用 startWith
来使 observable 发出一个值,即使它通常不会发出。
如果你想在没有startWith
的情况下处理初始值,你可以创建另一个流
Observable.of(stateCtrl.value).pipe(
map(state => state ? this.filterStates(state) : this.states.slice())
);
它只会发出一个值。但是同时处理这两种情况更容易,所以 startWith
是一个很好的方法...
我正在学习 Angular 5 使用 Typescript。我正在尝试实现 angular material 自动完成功能,我发现以下代码对我来说非常晦涩:
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 发生变化时,returns filterStates(state) 结果当且仅当在自动完成中选择了具体元素。
我不明白的是startWith('')的用法?!为什么不简化对 valueChanges 的调用订阅?
valueChanges
最初不会发出任何值(直到状态 实际改变 )。当你需要从初始状态计算某些东西时,你可以使用 startWith
来使 observable 发出一个值,即使它通常不会发出。
如果你想在没有startWith
的情况下处理初始值,你可以创建另一个流
Observable.of(stateCtrl.value).pipe(
map(state => state ? this.filterStates(state) : this.states.slice())
);
它只会发出一个值。但是同时处理这两种情况更容易,所以 startWith
是一个很好的方法...