Size: a a a

2020 July 17

RM

Roman Martyniuk in Angular Kyiv
потому что данные в таблице - это ССЫЛКА не твой исходный массив, и она оперирует элементами ИСХОДНОГО массива
источник

DG

Danil Gudz in Angular Kyiv
чтоб работать с либами без зашкваров нужно помнить 2 правила:
1) не мутировать данные (splice мутирует)
2) пользоваться паблик api (на скрине)
источник

DG

Danil Gudz in Angular Kyiv
если ты вызываешь метод с нижним подчеркиванием то не ожидай чего-то того что ты ожидаешь) ты вызвал внутренний метод и хочешь чтоб он как-то по-твоему работал
источник

DG

Danil Gudz in Angular Kyiv
смотришь на api класса
источник

DG

Danil Gudz in Angular Kyiv
тебе нужно удалить элемент
источник

DG

Danil Gudz in Angular Kyiv
чтоб это сделать нужно взять данные которые сейчас есть
источник

DG

Danil Gudz in Angular Kyiv
создать новый массив который копия изначально но без того элемента что ты удаляешь
источник

DG

Danil Gudz in Angular Kyiv
и закинуть этот новый массив в datasource
источник

DG

Danil Gudz in Angular Kyiv
это делается через .data считал
источник

DG

Danil Gudz in Angular Kyiv
сделал снаружи манипуляции
источник

DG

Danil Gudz in Angular Kyiv
и закинул через .data = новый массив
источник

DG

Danil Gudz in Angular Kyiv
тогда можно с этим как-то ожидаемо работать
источник

А

Алекс in Angular Kyiv
Danil Gudz
и закинуть этот новый массив в datasource
через new()
источник

А

Алекс in Angular Kyiv
Danil Gudz
если ты вызываешь метод с нижним подчеркиванием то не ожидай чего-то того что ты ожидаешь) ты вызвал внутренний метод и хочешь чтоб он как-то по-твоему работал
Происходит до его вызова
источник

А

Алекс in Angular Kyiv
дело еще в том что я не нашеk методов подписки на датасоурсе, что бы удалить знfчение и обновить view
источник

DG

Danil Gudz in Angular Kyiv
я ж тебе уже все рассказал)
источник

DG

Danil Gudz in Angular Kyiv
const dataSource = new MatTableDataSource([1,2,3,4,5]);

function removeByIndex(ds: MatTableDataSource<any>, index: number) {
 const currentArray = ds.data;
 const newArray = [...currentArray] // скопировали
 newArray.splice(index, index);
 ds.data = newArray;
 // либо вместо трех строк одной:
 // const newArray = currentArray.filter((e,i) => i !== index);
}
источник

DG

Danil Gudz in Angular Kyiv
если сильно интересно то просто можно залететь в сорцы
https://github.com/angular/components/blob/master/src/material/table/table-data-source.ts#L72
увидеть что на сеттере делается next
и твой компонент сам подхватит новый массив из внутреннего обзервебла
источник

DG

Danil Gudz in Angular Kyiv
ну, я имею в виду mat-table компонент
источник

А

Алекс in Angular Kyiv
да но такое решение короче index = this.tableContractorGroup.data.map(function(value) { return value._idGroup; }).indexOf(data._idGroup);
this.tableContractorGroup.data.splice(index,1);
источник