@DeborahK, это всего лишь "проверка", например, если Вы вводите и исправляете (например, вводите и удаляете), делаете Ctrl + V или аналогично
ользую Rxjs 6, который фильтрует наблюдаемое, возвращаемое Firebase на основе события (keyup) в поле формы.
У меня есть проблема, когда пользователь продолжает нажимать клавишу Backspace, пока в поле формы нет значения, тогда кажется, что наблюдаемое постоянно обновляется.
Добавление канала с помощью DistinctUntilChanged () не кажется эффективным:
Функция фильтра Typescript:
updateFilter2() {
const val = this.filteredValue.toLowerCase().toString().trim();
if (this.filteredValue) {
this.loadingIndicator = true;
this.rows = this.svc.getData()
.pipe(
distinctUntilChanged(),
debounceTime(300),
map(_co => _co.filter(_company =>
_company['company'].toLowerCase().trim().indexOf(val) !== -1 || !val
||
_company['name'].toLowerCase().trim().indexOf(val) !== -1 || !val
||
_company['gender'].toLowerCase().trim().indexOf(val) !== -1 || !val
)),
tap(res => {
this.loadingIndicator = false;
})
);
}
else {
this.rows = this.svc.getData()
.pipe(distinctUntilChanged())
this.loadingIndicator = false;
}
this.table.offset = 0;
}
HTML-шаблон:
<mat-form-field style="padding:8px;">
<input
type='text'
matInput
[(ngModel)] = "filteredValue"
style='padding:8px;margin:15px auto;width:30%;'
placeholder='Type to filter the name column...'
(input)='updateFilter2()'
/>
</mat-form-field>
У меня есть Stackblitz, воспроизводящий поведение:https://stackblitz.com/edit/angular-nyqcuk
Есть ли другой способ решить эту проблему?
Спасибо