2017-11-21 18 views
0

내가 만든 동적 폼 구성 요소에서 작업하고 있으며 사용중인 사용자 지정 템플릿이 컨텍스트를 올바르게 가져올 수 없습니다. 여기 컨텍스트가 작동하지 않는 각도 4 템플릿

내 NG 템플릿입니다 :

<ng-template #defaultTemplate let-field> 
    <div class="form-group" [ngClass]="!field.isValid() ? 'has-error' : ''"> 
     <label class="control-label" [for]="field.property">{{ field.label }}</label> 
     <app-dynamic-form-field [formField]="field"></app-dynamic-form-field> 
    </div> 
    </ng-template> 

그리고 여기 내가 사용하는 방법입니다 :

getContextForTemplate(field: BaseFormField<any>) { 
    return { 
     $implict: field 
    }; 
    } 
: 여기
<ng-container *ngFor="let field of formModel.formFields"> 
    <ng-container [ngTemplateOutlet]="fieldTemplate || defaultTemplate" [ngOutletContext]="getContextForTemplate(field)"> 

    </ng-container> 
    </ng-container> 

컨텍스트를 만드는 데 관련된 구성 요소의 타이프 라이터입니다

내가 겪고있는 오류 :

ERROR TypeError: Cannot read property 'isValid' of undefined

양식 필드 개체에는 isValid 메서드가 있지만. 위의 코드를 템플릿으로 사용하지 않고 컨테이너의 * ngFor 내부에서 직접 사용하지 않으면 모든 작업이 제대로 작동합니다.

편집 : 나뿐만 아니라이 코드를 시도하고 작동하지 않는 것 :

<form> 
    <ng-template #defaultTemplate let-field> 
    <div> 
     {{ field }} 
    </div> 
    </ng-template> 

    <ng-container *ngFor="let field of [1,2,3]" [ngTemplateOutlet]="defaultTemplate" [ngOutletContext]="{ $implict: 'hello' }"> 

    </ng-container> 

    <ng-content></ng-content> 
</form> 
+0

필드 속성이 구성 요소에 어떻게 채워 집니까? .isValid()를 호출하면 정의되지 않은 것처럼 보입니다. – Woot

+0

필드가 템플릿으로 사용되지 않으면 필드가 채워지고 작업 중임을 정의합니다. – Shynet

+0

재생산을 제공 할 수 있습니까? – yurzui

답변

0

약간 바보하지만 문제는 오타했다,이 :

getContextForTemplate(field: BaseFormField<any>) { 
    return { 
     $implict: field 
    }; 
    } 

것은해야한다 다음과 같이 변경되었습니다 :

getContextForTemplate(field: BaseFormField<any>) { 
    return { 
     $implicit: field 
    }; 
    } 

다른 말로하면 : $ implict는 $ 암시 적이어야합니다.