3
votes

I have a ng-template which is being passed on from one of my component and i have a placeholder to accept the passed on ng-template onto my component as shown below in ngTemplateOutlet.

<div>
<form novalidate #myForm="ngForm">
  <ng-container>
    <ng-template [ngTemplateOutlet]="myTemplate">
    </ng-template>
  </ng-container>
</form>
</div>

<!-- this template i am passing it from one of my other components -->
<ng-template #myTemplate>
  <input type="text" name="myInput" placeholder="Input"
    [(ngModel)]="inputModel" required/>
</ng-template>

The problem here is that my form('myForm') is ignoring the passed on ng-template eventhough it is marked as required. How can i make sure that my ngForm considers the passed on ng-template

1
already tried this fix but no luck - stackoverflow.com/questions/39242219/…. It will be better if i can handle it with a directive as provided in the above example itself - Nijas Nizam
If you set the template outlet on the container? <ng-container *ngTemplateOutlet="myTemplate"></ng-container> Docs: NgTemplateOutlet - Silvermind
Tried it doesn't make any difference - Nijas Nizam
Have you got a solution to this? I have the same issue - Josf
workaround below from saravana va works fine. This is probably a bug in Angular ngTemplateOutlet - Royalsmed

1 Answers

6
votes

I found the answer and its very simple

Please move your code... inside your form tag

<div>
   <form novalidate #myForm="ngForm">
      <ng-container>
          <ng-template [ngTemplateOutlet]="myTemplate">
          </ng-template>
      </ng-container>
   </div>

      <!-- this template i am passing it from one of my other components -->
   <ng-template #myTemplate>
      <input type="text" name="myInput" placeholder="Input"
       [(ngModel)]="inputModel" required/>
     </ng-template>

  **</form>**