gpt4 book ai didi

angular - RxJs 动态 debounceTime 不是动态的

转载 作者:行者123 更新时间:2023-12-01 13:14:06 26 4
gpt4 key购买 nike

我创建了一个 Angular 指令,该指令应用于输入并以一些延迟(用于搜索)发出其值。

这个代码如下

@Directive({
selector: '[search-field]'
})
export class SearchFieldDirective {
@Input() searchFieldValueOutputDelay = 400;

private _inputObservable$ = new Subject();

@Output() searchValueUpdated = this._inputObservable$.asObservable().pipe(
debounceTime(this.searchFieldValueOutputDelay),
distinctUntilChanged(),
tap(() => console.log('emit', this.searchFieldValueOutputDelay))
);

@HostListener('keyup', ['$event.target.value'])
onChange(e) {
console.log("change");
this._inputObservable$.next(e);
}
}

问题是 searchFieldValueOutputDelay仅第一次使用,因此它的值为 400 而不是我在输入时提供的值。
<input (searchValueUpdated)="searchCard($event)" [searchFieldValueOutputDelay]="1000" type="search">

最佳答案

debounceTime 的值仅在可观察的创建时间评估一次。

要能够动态更新 debounceTime,请使用 debounce连同timer , 像这样 :

@Output() searchValueUpdated = this._inputObservable$.asObservable().pipe(
debounce(()=>timer(this.searchFieldValueOutputDelay)),
distinctUntilChanged(),
tap(() => console.log('emit', this.searchFieldValueOutputDelay))
);

关于angular - RxJs 动态 debounceTime 不是动态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57305298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com