Я использую фильтр только для отображения данных в таблице соответствия в соответствии с фильтром.
В моем случае у меня есть mat-таблица, в которую я вставляю массив с объектами в нем.
Функция при фильтрации массива данных:
import {Component, ViewChild} from '@angular/core';
import {MatTable} from '@angular/material';
@ViewChild('TABLE') table: MatTable<any>;
dataSource: CandidateDataSource | null;
filterTableFunction(form) {
let result = this.dataSource.data.filter(obj => {
if (form.userValidation === true) {
return obj.candidateState === 'userValidation';
}
});
this.dataSource.filteredData = [...this.result];
this.table.renderRows();
console.log('I am new datasource', this.dataSource.filteredData);
console.log('I am result', result);
}
С моей консоли я вижу, что новый отфильтрованный массив корректен, однако моя таблица не обновляется новым массивом ,
Я также попытался сделать «результат» глобальной переменной, но безуспешно.
РЕДАКТИРОВАТЬ:
Первый ответ, к сожалению, не решил мою проблему.
Новый код:
// public
public result = [];
filterTableFunction(form) {
console.log('#1', this.dataSource.data); //logs an array of objects
this.result = this.dataSource.data.filter(obj => {
if (form.userValidation === true) {
return obj.candidateState === 'userValidation';
}
});
console.log('#2' , this.result); // New array containing the objects with candidateState === 'userValidation'
this.dataSource.data = [...this.result];
this.table.renderRows();
console.log('#3', this.dataSource.data) // Shows replaced array from above line with the correct result
}