У меня есть массив элементов, и каждый элемент массива имеет одну ссылку Удалить, клик которой я хочу, чтобы выбранный элемент массива был удален. Я толкаю объекты в массив уже и могу получить данные.Угловой 2 удаление выбранного элемента массива в дочернем компоненте
Код, который я использую, указан ниже.
Детский Component-
@Component({
selector: 'child',
template: `
<div>
{{element.name}}
<span (click)="deleteElement()">Delete</span>
</div>
`
})
export class ChildComponent {
@Input()
element: any;
@Output()
elementDeleted: EventEmitter<any> = new EventEmitter();
deleteElement() {
this.elementDeleted.emit();
}
}
Мой Родитель Component-
@Component({
selector: 'child',
template: `
<div>
<child *ngFor="let element of elements; let i= index;" [element]="element" (elementDeleted)="onElementDeleted(element)">
</child>
</div>
`
})
export class ParentComponent {
constructor() {
this.elements = [
{ name: 'element1' },
{ name: 'element2' },
(...)
];
}
onElementDeleted(element) {
var index = this.elements.findIndex((elt) => (elt===element));
if (index != -1) {
this.elements.splice(index, 1);
}
}
Прямо сейчас, каждый раз, когда последний элемент массива становится удален, вместо того, чтобы удалить выбранный item.For отл. Если я нажимаю ссылку Удалить для 0-го или 1-го индекса, все же последний элемент удаляется. Я не уверен, где я ошибаюсь.
Я тоже смотрел на это, и могу сказать, что поток правильный и работает таким образом: '(click) =" deleteElement() "' -> 'this.elementDeleted.emit()' -> '(elementDeleted) =" onElementDeleted (element) "', так что это определенно не эта проблема. –
Yaah, я просто не упомянул '#' в своем ответе: D Я даже не думал о том, чтобы делать это иначе, чем это, ну, теперь есть два варианта. Не думал, что # и пусть будет иметь значение, и что # все равно будет поддерживаться, по-видимому, не :) – Alex
Было, вероятно, слишком много проблем (например, этот вверх) с шаблоном с глобальным охватом '#', используемым в '* ngFor 'и он был удален, используя его теперь выдает ошибку. –