Самый важный момент заключается в том, что вы не должны использовать i
на своем item
.
item
уже представляет каждый элемент в вашем списке, поэтому обращайтесь к нему напрямую.
Кроме того, вам нужно сделать свой массив массивом объектов, чтобы Angular мог их отслеживать. (В идеале вы не должны использовать простой счетчик для назначения свойств id, это только для демонстрационных целей. Вы также можете использовать этот идентификатор для удаления из массива, если хотите, используя фильтр et c.)
https://stackblitz.com/edit/angular-ivy-twsm7e
app. html:
<button (click)="addSome()">add</button>
<div class="form-group" *ngFor="let item of inputFields; index as i">
<h6>{{item.id}}</h6>
<input type="text" class="form-control" name="price" [(ngModel)]="item.text" />
<button (click)="deleteSome(i)">delete</button>
</div>
app.ts
import { Component, VERSION } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
inputFields = [];
currentId = 0;
addSome() {
this.inputFields = [...this.inputFields, {text: "", id: this.currentId}];
this.currentId ++;
console.log(this.inputFields)
}
deleteSome(val: number) {
console.log(val);
this.inputFields.splice(val, 1);
console.log(this.inputFields)
}
}
Альтернатива:
с использованием идентификатора и фильтра вместо индекса и сращивания для удаления элементов:
app. html
<button (click)="addSome()">add</button>
<div class="form-group" *ngFor="let item of inputFields">
<h6>{{item.id}}</h6>
<input type="text" class="form-control" name="price" [(ngModel)]="item.text" />
<button (click)="deleteSome(item.id)">delete</button>
</div>
app.ts
import { Component, VERSION } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
inputFields = [];
currentId = 0;
addSome() {
this.inputFields = [...this.inputFields, {text: "", id: this.currentId}];
this.currentId ++;
console.log(this.inputFields)
}
deleteSome(id: number) {
console.log(id);
this.inputFields = this.inputFields.filter(item => item.id != id)
console.log(this.inputFields)
}
}