재귀 각도 양식에서 ngIf를 사용하여 경로로 컨트롤을 찾을 수 없음

제레미 루카스

다음은 아래 코드에 대한 stackblitz 입니다. FormArrays 및 자식 구성 요소를 사용하여 상당히 복잡하고 깊이 중첩 된 Angular 양식을 만들고 있습니다. 대부분의 경우 모든 것이 예상대로 작동합니다. group개체가 포함되어 conjunctor, conditions[]groups[]. groups[]동일한 객체를 포함하여 무한 중첩 될 수있는 중첩 그룹입니다.

현재 "그룹 추가", "중첩 된 그룹 추가", "조건 추가", "그룹 삭제"및 "조건 삭제"옵션이있어 중첩 된 양식 객체를 만듭니다. 이를 위해 앱은 세 가지 구성 요소로 분할됩니다.

AppComponent : ng-containers로 기본 양식을 보유 *ngFor하고 그룹을 반복합니다.

GroupControlComponent : AppComponent 내부의 각 항목의 논리를 보유하고 AppComponent와 동일한 작업을 수행하지만 조건 및 중첩 그룹에 대해

ConditionForm : 조건 항목의 논리를 보유합니다.

그리고 이벤트를 내보내고 그룹과 조건을 추가 및 제거하는 버튼을 보유하는 ActionsButtonsBarComponent가 있습니다.

나는 매 두 번째 그룹마다 그것을 만들려고 노력하고 있습니다. Conjunctor에 대한 입력이 있습니다. 첫 번째 인스턴스가 항상 null이되기를 원하기 때문에 첫 번째 인스턴스에서는 전혀 원하지 않습니다. 그러나 두 번째 및 그 이후 인스턴스에서 "AND"또는 "OR"옵션을 제공하는 conjunctor 입력이 나타나기를 원합니다. 이것을 만들 ERROR: Cannot find control with path: 'statement → groups → 1 → conjunctor때 AppComponent에서 오는 오류가 발생 합니다.

AppComponent의 모양은 다음과 같습니다.

<form [formGroup]="_form">
    <ng-container formGroupName="statement">
        <ng-container formArrayName="groups">
            <ng-container *ngFor="let group of _groupsFormArray?.controls; index as i">
         <div *ngIf="i > 0">
           <div [formGroupName]="i">
             <input type="text" formControlName="conjunctor">
           </div>
         </div>
            <app-group-control 
             (remove)="_delete(i)"
             [formControlName]="i"
             [formLabel]="'Group '+ (i + 1) + ':'">
            </app-group-control>
            </ng-container>
        </ng-container>
    </ng-container>
</form>

보시다시피 divngIf 논리를 포함하는이 있습니다.

<div *ngIf="i > 0">
  <div [formGroupName]="i">
    <input type="text" formControlName="conjunctor">
  </div>
</div>

이 방법은 작동하지 않지만 내가 시도한 다른 방법은 없습니다.

지금까지, 나는에 FormGroupName 여러 번 변경 시도 groups, statements, i, index, 아니 개선의 결과로.

또한 템플릿 ref를 사용 ngFor하여을 사용하여 AppComponent에서 각 인스턴스를 추적 @ViewChildren('templateRef') templateRefVar: QueryList<ElementRef>;한 다음 내부 에서 추적 해 보았습니다 . 거기에서를 사용하여 자식 구성 요소 에 전달한 다음 ngIf 내부를 사용합니다. 이것은 내가 얻은 가장 가까운 것이지만 문제는 ngIf 조건이 충족 될 때마다 첫 번째를 포함하여 그룹 배열의 모든 인스턴스에 나타나고 오류가 발생한다는 것 입니다.. 이 방법을 사용하여 가장 가까운 StackBlitz가 있습니다. 그리고 여기 에 위 코드 의 StackBlitz가 있습니다.ngFor#templateReftemplateRef.lengthGroupControlComponent@Input() groupInstancesExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '0'. Current value: '1'.

이 재귀 양식에 대해 더 자세히 알고 싶다면 여기에서 읽을 수 있습니다.

줄리아 노브라 실

Stackblitz demo

그것이 무엇인지에 대해 더 분명하게 만들기 위해 groupInstancefor를 대체합시다 showConjunctor.

당신은 이것을 할 수 있습니다 app.component.hml:

<app-group-control 
  #templateRef
  (remove)="_delete(i)"
  [formControlName]="i"
  [formLabel]="'Group '+ (i + 1) + ':'"
  [showConjunctor]="!((i + 1) % 2)">
</app-group-control>

i위의 스 니펫에서는 현재 루프의 인덱스 라고 생각합니다 *ngFor(Stackblitz 데모에서와 같이).

또한 다음에서이 부분을 제거하십시오 app.component.html.

<div *ngIf="i > 0">
  <div [formGroupName]="i">
    <input type="text" formControlName="conjunctor">
  </div>
</div>

[업데이트] : 귀하의 의견에 따라 중첩 된 모든 그룹에 결합 자를 포함@Input() showConjuntor 하려면 GroupControlComponent( Stackblitz 데모 ) 내에서를 true로 설정할 수 있습니다 .

<ng-container formArrayName="groups">
  <app-group-control *ngFor="let s of _groupsFormArray?.controls; index as i"
                      (remove)="_deleteGroupFromArray(i)" 
                      [formControlName]="i"
                      [formLabel]="'Nested Group '+ (i + 1) + ':'"
                      [showConjunctor]="true">
  </app-group-control>
</ng-container>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Jasmine 및 Chutzpah를 사용하여 Visual Studio에서 TypeScript 및 AngularJS 테스트-변수를 찾을 수 없음 : 각도

분류에서Dev

보이는 것으로 찾은 후 재귀를 사용하여 요소를 찾을 수 없습니다.

분류에서Dev

컨트롤러 As 구문을 사용하여 각도 1.5에서 양식 재설정 오류

분류에서Dev

foreach 경로를 사용하는 표준 도구에 대한 C 셸 "명령을 찾을 수 없음"

분류에서Dev

각도 반응 형식이 관련없는 모델 필드에 대해 "이름으로 컨트롤을 찾을 수 없음"을 발생시킵니다.

분류에서Dev

안드로이드 : GPS를 활성화 한 후에도 FusedLocationApi를 사용하여 위치를 찾을 수 없음

분류에서Dev

각도 경로가 작동하지 않음, 페이지를 찾을 수 없음 오류 발생

분류에서Dev

Symfony 3.1 : "/ logout"경로에 대한 컨트롤러를 찾을 수 없습니다.

분류에서Dev

ajax를 사용하여 양식을 제출할 때보기에서 컨트롤러의 필드 데이터를 가져올 수 없음

분류에서Dev

제네릭 유형에서 사용자 컨트롤을 찾는 재귀 함수

분류에서Dev

정의 된 경로 던지는 컨트롤러 메서드를 찾을 수 없음 Laravel 4

분류에서Dev

정의 된 경로 던지는 컨트롤러 메서드를 찾을 수 없음 Laravel 4

분류에서Dev

원격 Selenium 서버에서 Jenkins를 통해 각도기 테스트를 실행하여 사양을 찾을 수 없음

분류에서Dev

업로드 후 미디어 파일이 각도 2에서 파일을 재생할 수 없으며 404를 찾을 수 없음을 표시합니다.

분류에서Dev

Rails 컨트롤러를 사용하여 Heroku에서 파일을 다운로드 할 수 없습니다.

분류에서Dev

angularjs 및 ionic을 사용하여 컨트롤러에서 뷰로 데이터를 가져올 수 없습니다.

분류에서Dev

Ajax를 사용하여 Jquery에서 Spring 컨트롤러로 Multipart 파일을 보낼 수 없습니다.

분류에서Dev

사용자 지정 양식 요청에서 경로를 찾을 수 없습니다.

분류에서Dev

C #을 사용하여 재귀 함수가 가져온 경로를 찾는 방법은 무엇입니까?

분류에서Dev

UI 재질 양식에서 FormData를 사용하여 양식 필드 값을 가져올 수 없습니다.

분류에서Dev

jquery를 사용하여 양식에서 속성을 설정할 수 없음

분류에서Dev

Outlet 속성을 사용하여 한 컨트롤러에서 다른 컨트롤러로 Segue를 전달할 수 없습니까?

분류에서Dev

Laravel 테스트에서 Storage :: fake ()를 사용하여 경로에서 파일을 찾을 수 없습니다.

분류에서Dev

Spectre를 사용하여 맵 맵에서 값을 재귀 적으로 변경

분류에서Dev

각도 컨트롤러 테스트를 설정할 때 모듈을 찾을 수 없음

분류에서Dev

404 찾을 수 없음 각도 2 경로

분류에서Dev

'도메인 컨트롤러'에서 '사용자'개체를 찾을 수 없습니다.

분류에서Dev

각도기 / 셀레늄 "에서 chromedriver를 찾을 수 없음"(Windows)

분류에서Dev

Taiko UI 자동화 각도-fileField를 사용하여 csv 파일을 업로드 할 수 없음

Related 관련 기사

  1. 1

    Jasmine 및 Chutzpah를 사용하여 Visual Studio에서 TypeScript 및 AngularJS 테스트-변수를 찾을 수 없음 : 각도

  2. 2

    보이는 것으로 찾은 후 재귀를 사용하여 요소를 찾을 수 없습니다.

  3. 3

    컨트롤러 As 구문을 사용하여 각도 1.5에서 양식 재설정 오류

  4. 4

    foreach 경로를 사용하는 표준 도구에 대한 C 셸 "명령을 찾을 수 없음"

  5. 5

    각도 반응 형식이 관련없는 모델 필드에 대해 "이름으로 컨트롤을 찾을 수 없음"을 발생시킵니다.

  6. 6

    안드로이드 : GPS를 활성화 한 후에도 FusedLocationApi를 사용하여 위치를 찾을 수 없음

  7. 7

    각도 경로가 작동하지 않음, 페이지를 찾을 수 없음 오류 발생

  8. 8

    Symfony 3.1 : "/ logout"경로에 대한 컨트롤러를 찾을 수 없습니다.

  9. 9

    ajax를 사용하여 양식을 제출할 때보기에서 컨트롤러의 필드 데이터를 가져올 수 없음

  10. 10

    제네릭 유형에서 사용자 컨트롤을 찾는 재귀 함수

  11. 11

    정의 된 경로 던지는 컨트롤러 메서드를 찾을 수 없음 Laravel 4

  12. 12

    정의 된 경로 던지는 컨트롤러 메서드를 찾을 수 없음 Laravel 4

  13. 13

    원격 Selenium 서버에서 Jenkins를 통해 각도기 테스트를 실행하여 사양을 찾을 수 없음

  14. 14

    업로드 후 미디어 파일이 각도 2에서 파일을 재생할 수 없으며 404를 찾을 수 없음을 표시합니다.

  15. 15

    Rails 컨트롤러를 사용하여 Heroku에서 파일을 다운로드 할 수 없습니다.

  16. 16

    angularjs 및 ionic을 사용하여 컨트롤러에서 뷰로 데이터를 가져올 수 없습니다.

  17. 17

    Ajax를 사용하여 Jquery에서 Spring 컨트롤러로 Multipart 파일을 보낼 수 없습니다.

  18. 18

    사용자 지정 양식 요청에서 경로를 찾을 수 없습니다.

  19. 19

    C #을 사용하여 재귀 함수가 가져온 경로를 찾는 방법은 무엇입니까?

  20. 20

    UI 재질 양식에서 FormData를 사용하여 양식 필드 값을 가져올 수 없습니다.

  21. 21

    jquery를 사용하여 양식에서 속성을 설정할 수 없음

  22. 22

    Outlet 속성을 사용하여 한 컨트롤러에서 다른 컨트롤러로 Segue를 전달할 수 없습니까?

  23. 23

    Laravel 테스트에서 Storage :: fake ()를 사용하여 경로에서 파일을 찾을 수 없습니다.

  24. 24

    Spectre를 사용하여 맵 맵에서 값을 재귀 적으로 변경

  25. 25

    각도 컨트롤러 테스트를 설정할 때 모듈을 찾을 수 없음

  26. 26

    404 찾을 수 없음 각도 2 경로

  27. 27

    '도메인 컨트롤러'에서 '사용자'개체를 찾을 수 없습니다.

  28. 28

    각도기 / 셀레늄 "에서 chromedriver를 찾을 수 없음"(Windows)

  29. 29

    Taiko UI 자동화 각도-fileField를 사용하여 csv 파일을 업로드 할 수 없음

뜨겁다태그

보관