Я создаю компонент с сеткой данных материала
Внутри каждой строки я динамически создаю компонент и добавляю его в последнюю ячейку, он устанавливается как многоточие (кнопка просмотра дополнительной информации)
У меня есть функция, которая добавляет их в ячейку таблицы и добавляет к ним информацию из данных, возвращаемых из вызова API
addEllipsisToTable() {
setTimeout(() => {
let sideMenu = this.sideMenu.toArray()
// Add ellipsis menus' to returned results
for (let i = 0; i < sideMenu.length; i++) {
const factory = this.resolver.resolveComponentFactory(this.ellipsis);
let container = this.sideMenu.toArray()[i]
const ellipsisComponent = container.createComponent(factory);
ellipsisComponent.instance.data = this.returnedData[i]
}
}, 300)
}
Это работает, однако, когда я фильтрую записи, используя поле поиска, несколько раз многоточие добавляется дважды.
Это код для поиска:
let txt: Filter;
fromEvent(this.input.nativeElement, 'keyup')
.pipe(
debounceTime(200),
distinctUntilChanged(),
tap(() => {
this.filtersArray = [];
txt = {
Value: this.input.nativeElement.value,
Operation: 5,
Property: 'Name'
}
this.filtersArray.push(txt);
})
)
.subscribe((data) => {
this.paginator.pageIndex = 0;
this.loadUserPage();//reloads datagrid
});
Когда вы печатаете и данные возвращаются, выполняется функция getPagedInfo, которая удаляет многоточие, получает данные, а затем добавляет новые обратно:
getPagedInfo() {
return this.dataSource.pagedInfoSubject
// .skip(1)
.pipe(
tap(() => this.removeEllipsisFromTable())
)
.subscribe((data) => {
this.selection.clear();
this.totalItems = data.totalItems;
this.returnedData = data.returnedData;
this.addEllipsisToTable()//This sometimes gets performed twice
console.log(this.returnedData)
//returnedData holds array of current visible items
if (this.totalItems == 0) {
this.filtersArray = [];
} else if (this.totalItems < 10) {
this.filtersArray = [];
}
});
}
Есть ли функция rxjs, которую я могу использовать, может быть, или мне придется сопоставлять новые возвращенные данные со старыми и, если они другие, добавить?