На данный момент вы используете асинхронный массив, однако вам нужно поддерживать локальный массив в компоненте, и вы можете изменить его в соответствии с требованиями.
Всякий раз, когда вы получаете модели из API, вы можете обновить локальный массив моделей.
ц
import { Component } from '@angular/core';
import { Observable, of } from 'rxjs';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
models = [];
min = 2;
getModels(){
let need = this.min - this.models.length;
if(need > 0){
for(let i=0; i<need; i++){
this.models.push(this.getEmptyModel());
}
}
return this.models;
}
fetchData(){
this.getModelsFromAPI().subscribe(response=>{
this.models = response;
});
}
addModel(){
this.models.push(this.getEmptyModel());
}
onSubmit(){
console.log(this.models);
}
getEmptyModel(){
return {data1 : "", data2 : ""}
}
getModelsFromAPI(){
return of( [
{
"data1": "AA",
"data2": "BB"
}
])
}
}
HTML
<form (ngSubmit)="onSubmit()" #modelForm="ngForm">
<div *ngFor="let model of getModels(), let i = index">
<input name="data1{{i}}" [(ngModel)]="model.data1" />
<input name="data2{{i}}" [(ngModel)]="model.data2" />
</div>
<button type="button" (click)="addModel()">Add</button>
<button type="submit">Submit</button>
<button type="button" (click)="fetchData()">Fetch Data</button>
</form>
Вот пример приложения согласно требованию - https://stackblitz.com/edit/angular-qnbtdb