2017-02-18 1 views
0

우리는 항목을 테이블에 추가하거나 개별적으로 편집 할 수있는 일반 테이블 구성 요소를 작성하려고합니다. 양식에 항목을 추가하기 전에 항목을 편집하기 위해 표에 addFormFormGroup이 있습니다. 아이템이 addForm에서 추가되면 lodash의 cloneDeep()FormArray으로 복사됩니다.FormGroup을 재귀 적으로 복사하는 방법은 무엇입니까?

지금 진행중인 문제는 행 수정입니다. 테이블의 각 행은 전체 구성 요소에있는 editForm에 바인딩 된 양식을가집니다. 아이디어는 FormArray의 값을 editForm으로 복사 한 다음 양식을 사용자가 볼 수있게 만드는 것입니다. 불행히도 우리는 더 복잡한 형태의 문제를 겪고 있습니다. 여기서 우리는 서로 내부에 테이블 구성 요소를 중첩하려고합니다. 내가 좋아하는) _.cloneDeep와 editForm (에 FormArray에서 복사하는 경우

이 _.cloneDeep()

를 사용하여 ... 나는 몇 가지 다른 방법을 시도했지만 그들은 각각 자신 잡았다가 우리는 FormArray에 복사를 사용하여 formControlName 바인딩이 엉망이 된 것처럼 보입니다. 나는 이것을 FormGroup으로 바꾸는 것이 FormGroup에 대한 몇 가지 내부 각도 참조를 엉망으로 만들었 기 때문에 이것을 추측하고 있습니까? 이에서 내 다른 시도가 사용하는 것이었다

patchValue()를 사용

this.editForm = _.cloneDeep(this.formArray.controls[index]) as FormGroup;

Error: There is no FormControl instance attached to form control element with name: 'myControlName' 

patchValue() 내장하지만 아무튼 patchValue()처럼 보이는 ':이 오류가 바람 FormArray을 아주 잘 처리하십시오.

this.editForm.patchValue((this.formArray.controls[index] as FormGroup).getRawValue());

> this.formArray.controls[0].controls['treatingPhysicians'].controls[0].controls 
    - Object 
    - address: FormGroup 
    - id: FormControl 
    - physicianFullName: FormControl 
    - __proto__: Object 
> this.editForm.controls['treatingPhysicians'].controls[0].controls 
    - [] 

사용자 정의 복사 기능을 쓰기

우리는 또한 불행하게도 또한 어려운이기 때문에, FormArray들에 질식 할 것 같다, 우리 자신의 사용자 지정 양식 복사 기능은 주위에 누워있다 배열에있는 객체의 속성이 컨트롤인지 아니면 다른 중첩 된 FormGroup인지 알려줍니다.

this.editForm = this.buildOutValues((this.formArray.controls[index] as FormGroup).getRawValue(), this.editForm);

> this.formArray.controls[0].controls['treatingPhysicians'].controls[0].controls 
    - Object 
    - address: FormGroup 
    - id: FormControl 
    - physicianFullName: FormControl 
    - __proto__: Object 
> this.editForm.controls['treatingPhysicians'].controls[0].controls 
    - Object 
    - address: FormControl 
    - id: FormControl 
    - physicianFullName: FormControl 
    - __proto__: Object 

그래서 양식을 복사하여 재치있는 모든 각도 참조를 유지하는 좋은 방법은 무엇입니까? 또는 사용자 지정 양식 복사 방법을 수정할 수있는 방법이 있으며 그룹이어야하며 컨트롤이어야하는 속성을 구별 할 수 있습니까?

답변

0

양식의 값이 아닌 FormGroup을 기반으로 복사하는 사용자 지정 양식 복사 기능을 작성하여이 문제를 해결할 수있었습니다. isinstance을 사용하면 FormGroup의 각 컨트롤을 복사하는 방법을 파악하기에 충분했습니다.

+0

양식 복사 기능을 공유 할 수 있습니까? 나는 똑같은 문제에 직면하고 있으며 아마도 사용자 정의 복사 구현의 동일한 기술을 따를 것입니다. –

관련 문제