Я использую Angular8 и реактивные формы. Мой ngOnInit:
ngOnInit(): void {
this.makeForm = this.fb.group(
year: ['', Validators.required],
amount: ['', Validators.required],
desc: ['', Validators.required],
details: new FormArray([
this.det(),
]
);
}
det() {
return new FormGroup({
for: new FormControl(''),
remarks: new FormControl('')
});
}
У меня есть данные из бэкэнда для исправления массива:
{
"amount": 9000,
"year": 1996,
"id": 1,
"desc": "P1",
"details": [
{
"id": 1,
"remarks": "ok",
"for": "1"
},
{
"id": 24,
"remarks": "OK",
"for": "1"
},
{
"id": 25,
"remarks": "OK",
"for": "1"
}
]
}
Я обычно исправляю значения с помощью этого метода:
getppredit() {
let data:any = this.shareService.ParentShare.value;
let id = data.id;
this.dataService.getdataEdit(id)
.subscribe((result: any) => {
let no = result.no;
let year = result.year;
this.makeForm.patchValue({
no: no,
year: year
});
});
}
Приведенный выше код используется для обычного исправления, но как динамически исправить значение внутри массива, используя реактивные формы Angular8?
Попробуйте вот это
getppredit(){
let data:any = this.shareService.ParentShare.value
let id = data.id
this.dataService.getdataEdit(id)
.subscribe((result: any) => {
let no = result.no;
let year= result.year
this.makeForm.patchValue({
no : no,
year: year
})
//initialize empty array
this.getFormArray() = new FormArray([]);
//create needed formGroups and inside each formGroup all formControls
for (let detail of result.details) {
let idControl: FormControl = new FormControl('');
let requestForControl: FormControl = new FormControl('');
let remarkControl: FormControl = new FormControl('');
idControl.setValue(detail.id);
ForControl.setValue(detail.requestFor);
remarkControl.setValue(detail.remark);
this.getFormArray().push(new FormGroup({
id: idControl,
For: requestForControl,
remark: remarkControl}));
}
})//end of subscribe
}
getFormArray(): FormArray{
return this.makeForm.get('details') as FormArray;
}
Массивы форм обычно предназначены для хранения динамических данных. Поэтому вы должны сначала создать свои динамические элементы управления формы внутри массива формы (после того, как вы получили свой ответ), а затем поместить значения внутрь.
Как нажать на массив существования @Panagiwths Mpougioukos
@Madhav существующий массив можно переместить в с помощью array.push()
. Смотрите мой ответ выше
@Madhav, вы используете этот метод, который у меня есть в моем ответе getFormArray(), чтобы получить ссылку на ваш существующий массив, а затем вы используете push для нажатия нового элемента
@Madhav Вы можете использовать, если хотите, чтобы getFormArray().push(dat()) использовал ваш dat(), однако форма, которую вы отправите, будет иметь пустые значения, а не значения из ответа json. Если вы хотите иметь эти значения, вы должны увидеть, что я сделал в ответе.
Да, спасибо, чувак.. Теперь я понял и спасибо. Я получил решение и извлек уроки из него
вот как я бы сделал это, используя FormArray, который отслеживает значение и состояние достоверности массива экземпляров FormControl, FormGroup или FormArray:
export class Component implements OnInit {
// initialize the FormArray with an empty array!
formArray: FormArray = new FormArray([]);
makeForm: FormGroup;
ngOnInit() {
this.makeForm = this.fb.group({
no: ['', Validators.required],
year: ['', Validators.required],
});
}
getParEdit() {
...
this.dataService.getDataEdit(id).subscribe(result => {
const { no, year, details } = result;
this.makeForm.patchValue({ no, year });
if (details.length) {
details.forEach(detail => {
this.formArray.push(
this.fb.group({
id: new FormControl({ value: detail.id }),
requestFor: new FormControl({ value: detail.requestFor }),
remark: new FormControl({ value: detail.remark }),
});
);
});
}
});
}
}
вы можете динамически создавать FormGroup
для каждой итерации detail
, а также FormControl
в каждой.
Как вставить значение в этот массив? det(){ return new FormGroup({ requestfor : new FormControl(''), примечания: new FormControl(''), // file_id : new FormControl(''), })}
как вставить значение в существующий массив
@Madhav Не уверен, что ты пытаешься спросить. Это не массив, это FormGroup
. Пример, который я привел выше, показывает, как вставить FormGroup
в FormArray
.
теперь я понимаю, и спасибо, чувак, и я научился этому
Как обнаружить изменение значения в этом запросе?