Ich verwende die Klarheit Datagrid und ich möchte in der Lage sein, basierend auf einem Suchfilter den gesamten Inhalt des Rasters zu filtern.Suche in DataGrid
Ich habe versucht, eine Pipe zu erstellen. Das Rohr ist im AppModul enthalten. Die Pipe wird das erste Mal aufgerufen, wenn die Komponente geladen wird (und nichts soll passieren), aber aus irgendeinem Grund passiert nichts, wenn ich etwas in meine einfüge. Kein Aufruf der 'userFilter'-Pipe.
user.component.html
<input type="text" id="search" placeholder="Search..." ([ngModel])="searchTerm">
...
<clr-dg-row *clrDgItems="let user of users | userFilter: searchTerm" [clrDgItem]="user" (click)="backupSelectedUser(user)">
<clr-dg-cell>{{ user.username }}</clr-dg-cell>
<clr-dg-cell>{{ user.name }}</clr-dg-cell>
<clr-dg-cell>{{ user.firstName }}</clr-dg-cell>
</clr-dg-row>
...
search.pipe.ts
transform(items: any, term: any): any {
if (term === undefined) {
return items;
}
return items.filter(function (item) {
for (const property in item) {
if (item[property] === null) {
continue;
}
if (item[property].toString().toLowerCase().includes(term.toLowerCase())) {
return true;
}
}
return false;
});
}
UPDATE: Ich habe ein wenig Tippfehler für die ngModel tat. Es sollte stattdessen [(ngModel)] sein!
Ich habe das Gefühl, dass dies liegt daran, wenn Sie 'clrDgItems' verwenden, wird das gesamte Paging, Sortieren und Suchen von Clarity durchgeführt. Wird es mehrmals aufgerufen, wenn Sie es zu einem regulären 'ngFor' ändern? Sind Sie sicher, dass Ihre 'users'-Variable unveränderlich ist? Wenn dies nicht der Fall ist, ignoriert die Pipe möglicherweise Änderungen am Array. –
Es wurde überhaupt nicht aufgerufen, aber der Grund war, weil ich mit meinem ngModel einen kleinen Tippfehler gemacht habe. Es sollte stattdessen [(ngModel)] sein! Schande über mich. Es funktioniert – David