else部分不在* ngIf语句中执行

时间:2017-10-06 12:50:30

标签: angular ngif

我正在使用*ngIf语句,但在其中遇到问题:else部分未执行。我不知道为什么,这里是源代码。

<form [formGroup]="reviewForm" (ngSubmit)="onSubmit()">
    <div formArrayName="controlArray">
        <div class="form-group"
             *ngFor="let control of reviewForm.get('controlArray').controls; let i = index">       
             {{control.value}}                     
             <span *ngIf="control.value!='dropdown';else addDropDown">                                
                 <input type="{{control.value}}"   
                        class="form-control"
                        [formControlName]="i" />                                  
                 <ng-template #addDropDown>
                     <p>hello world</p>
                     <select class="form-control"                   
                             [formControlName]="i">  
                     </select>
                 </ng-template>
             </span>  
         </div>  
    </div>  
</form>

请帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

其他条件的模板应该与* ngIf条件的级别相同。 当* ngIf为false时,将从DOM中删除当前元素。由于你的ng-template在元素内部,因此不适用于else条件。

* ngIf else工作的正确方法是让其他模板在DOM的层次结构中的* ngIf内除外。

了解更多信息:https://angular.io/api/common/NgIf#showing-an-alternative-template-using-else

在您的情况下,将代码更改为

 <!-- If Template -->
 <span *ngIf="control.value!='dropdown';else addDropDown">                                
            <input 
              type="{{control.value}}"   
              class="form-control"
              [formControlName]="i">                                 
 </span>  

 <!-- Else Template -->
  <ng-template #addDropDown>
              <p>hello world</p>
              <select `enter code here`
                class="form-control"                   
                [formControlName]="i">  
              </select>
  </ng-template>