사용자가 빈 생성 된 컨트롤에 값을 추가 한 후 formArray
을 업데이트하려고합니다.각도 4 FormValue의 인덱스를 기반으로 patchValue
현재 사용자가 새 항목을 추가하기로 선택하면 formArray
에 값이 비어 있습니다.
buildItem(item?: any, key?: any): FormGroup {
// Item will pass undefined for initial buildItem in onLoad and new items
let itemName: string;
let keyValue: string;
if (item === undefined) {
itemName = ''; key = '' }
else {
itemName = item.name; keyValue = key
};
/**
* Builds a single item for form group array in the collectionForm.
*/
return this.formBuilder.group({
item: [itemName || '', Validators.required],
properties: { item, key: key } || {} });
}
이 기능은 이미 추가 된 항목의 초기 생성 및 업데이트에 적합합니다. 문제는 빈 값으로 추가 된 새 항목입니다. 나는 새로운 항목을 추가 할 때 나는 그러나 patchValue
가에서 작동하지 않는 나는 patchValue
this.items.patchValue([{
// item being returned from firebase promise
item: item.name,
properties: { item: item.name, key: item.$key' }
}]);
을 추가 한 새 항목의 퇴피하기위한 방법에서 properties.key
에서 중포 기지에서 리턴 키를 추가해야 모든. 내가 새 값을 업데이트하려고해도 값이 firebase에 저장되었지만 값이 비어 있거나 값이 초기 값인 BuildItem()
이 아닌 값으로 반환됩니다. patchValue
그것은 컨트롤의 구조와 일치하고, 그룹에 정확한 컨트롤 값과 일치하도록 최선을 다할 것입니다 배열을 받아
각도
FormArray
문서에. REF
해당 값을 업데이트 할 수도 있고 업데이트하지 않을 수도 있습니다. 시도하는 것이 최선의 방법일까요? 나는 내가 원하는 값에 대한 인덱스를 추가 할 수 있다면 그것이 문제가되어서는 안된다. 그래서 removeAt(idx)
와 마찬가지로 나는
this.form.patchValue.atIndex(this.idx,[{
item: item.name,
properties: { item: item.name, key: item.$key' }
}];
하지만 난 그렇게 할 수 확실하지 뭔가를 쓸 수 있다면 .. 잘 확신 그것이 불가능을하는 형태. formArray
에 패치를 적용하거나 정확하게이 항목을 이해하지 못하는 항목을 구체적으로 타겟팅 할 수있는 방법이 있습니까?
나는 종류의 난이 빈에 초기 컨트롤을 제거하기 위해
this.items.removeAt(this.idx);
을 추가 한 후 그러나 formArray
this.items.push(this.buildItem(...));
에 새 값을 눌러이 멀리 얻을 수 있습니다 빌드, 어떤 종류의 좋은 코드처럼 보이지 않습니다.+ AbstractControl#patchValue
'this.items.at (index) .patchValue (...)'는 작동하지 않습니다. ? – developer033
@ developer033 그래, 고마워, 그걸 답으로 추가 할 수있어. –
오해가있을 수 있지만 값을 설정하려면 왜 비어있는 컨트롤을 먼저 만드나요? :) – Alex