我正在使用Angular 7和最新的RxJS和ngrx / store。我遇到debounceTime(0)
问题。 debounceTime是ui-input
组件的@Input()属性。其默认值为0
。我希望对某些输入使用debounceTime
-对于其他输入-不。我从商店获得的输入值。另外,我有一个验证服务,可以验证输入值。我通过选择器将输入值传递给验证服务。问题是,在验证服务中,我得到了以前的值。这是一个简化的(更新的)example。我有验证规则:input.length>2。当长度大于2时,我想得到一个错误。但是,使用debounceTime(0)时,仅当输入的长度为4时,我才在控制台中得到一个验证错误。
如果我删除debounceTime-一切正常。我收到一个同步呼叫:
我该如何解决该问题?我没有发现有条件地应用debounceTime的任何变体。另外,我认为这样的方法不是一个好的解决方案:
ngOnInit() {
if (this.debounceTime > 0) {
this._valueChanged
.pipe(
debounceTime(this.debounceTime),
)
.subscribe(value => this.inputted.emit(value));
} else {
this._valueChanged
.subscribe(value => this.inputted.emit(value));
}
}
最佳答案
您不应该从Subject或BehaviorSubject获取值,而应该订阅它。
store.service.ts
因此,应更改以下代码
process() {
console.log('Store: ', this.value$.getValue());
}
至
constructor(){
this.value$.subscribe(v=>{
console.log('Store: ', v);
})
}
您无需手动调用store函数,因此也可以将其删除。
工作示例代码在这里-https://stackblitz.com/edit/angular-5ajqn9