В настоящее время я пытаюсь внедрить систему фильтрации в моей сетке с данными ngx.
Пока все работает, я могу фильтровать по каждому столбцу отдельно и объединять результаты нескольких фильтров.
Однако мне недавно сказали, что были ошибки, как только кто-то выделил текст фильтра.Это не имеет смысла для меня, тем более что я не опытный фронт-разработчик.Я думаю, что это проблема, связанная с самой библиотекой, а не с моим кодом.
Вот небольшой GIF-файл, показывающий, что происходит.
https://gyazo.com/f41fe4db230d3204bfeb6b4e1220f93d
И содержание ошибки:
DatatableComponent.html: 65 ОШИБКА TypeError: Невозможно прочитать свойство 'length' undefined в Object.eval [как updateDirectives] (DatatableComponent.html: 76) в Object.debugUpdateDirectives [as updateDirectives] (vendor.js: 81724) в checkAndUpdateView (vendor.js)81120) в callViewAction (vendor.js: 81361) в execEmbeddedViewsAction (vendor.js: 81324) в checkAndUpdateView (vendor.js: 81121) в callViewAction (vendor.js: 81361) в execComponentViewsAction (vendor.jate 81): 81:vendor.js: 81126) в callViewAction (vendor.js: 81361)
Что не имеет смысла, поскольку я уверен на 100%, что свойство длины правильно инициализировано.
Надеясь, что у кого-то есть идея по этому поводу ...
РЕДАКТИРОВАТЬ: Итак, как уже упоминалось в комментарии ниже, я сейчас публикую исправление, которое мы нашли.
Мы создали следующую директиву:
import {Directive, HostListener} from "@angular/core";
@Directive({
selector: "[selectStopPropagation]"
})
export class SelectStopPropagationDirective {
@HostListener('select', ['$event'])
public handleSelect(event: Event) {
event.stopPropagation();
}
}
, которую мы применили к каждому полю фильтра нашего приложения:
<mat-form-field>
<input matInput selectStopPropagation placeholder="Filter..." (keyup)='updateFilter($event,column.prop)'/>
</mat-form-field>
Вот и все.Надеюсь, что это будет полезно для кого-то один день.