按钮单击以呈现文本区域给出错误

Button click to render textarea giving error

提问人:user17449555 提问时间:9/24/2023 更新时间:9/24/2023 访问量:34

问:

我有一个按钮,单击该按钮时,应该呈现一个文本区域。我正在使用 Angular Material。尝试在 textarea 标签中使用 ngIf 但出现错误 -

错误:mat-form-field 必须包含 MatFormFieldControl。我已经添加了库,所以我认为是ngIf导致了问题。将 textarea 标签包装在 ngcontainer 标签中并在其中使用 ngIf 也会出现此错误。 [HTML全

        <button  mat-raised-button color="primary" (ngSubmit)= "toggleTextBox()">
            Add 
        </button>  
        <form [formGroup]= "limitationForm">  
          <mat-form-field > 
            <mat-label>Textarea</mat-label>            
            <textarea matInput *ngIf= "showTextBox" formControlName="limitTextarea"  
             type="text"  id="limitTextarea" name="limitTextarea" ></textarea>                   
        </mat-form-field>   
       </form>

Ts

toggleTextBox() {
    this.showTextBox = !this.showTextBox; 
}
角度 按钮 输入 angular-material angular-ng-if

评论

0赞 Eric Phillips 9/24/2023
你是对的,是 *ngIf 导致了问题。您可以将 *ngIf 指令放在 mat-form-field 上(这将更改 UI),也可以隐藏 textarea(而不是实际上将其从 dom 中删除,等等。<textarea [hidden]="!showTextBox">,<textarea [style.display]="showTextBox ? null : 'none'">
0赞 user17449555 9/24/2023
我已经在mat-form-field中添加了<mat-form-field *ngIf= “showTextBox”>但没有任何反应,也没有错误。我错过了什么?当你说会改变UI时,你是什么意思?
0赞 Eric Phillips 9/24/2023
我的意思是 UI 将与您最初的尝试不同,因为现在您的标签将被隐藏,因为它被包装在 *ngIf 中。如果你想让标签始终显示,你将不得不用css隐藏文本框,而不是*ngIf

答:

0赞 Ahmed El-sayed 9/24/2023 #1

如果您正确导入了它,请尝试从 mat-form-field 制作两个版本,一个带有 textarea,另一个没有它,以避免更改样式并消除错误。

<button  mat-raised-button color="primary" (ngSubmit)= "toggleTextBox()">
  Add 
</button>  
<form [formGroup]= "limitationForm">  
<mat-form-field *ngIf= "!showTextBox"> 
  <mat-label>Textarea</mat-label>            
</mat-form-field>   
<mat-form-field *ngIf= "showTextBox"> 
  <mat-label>Textarea</mat-label>            
  <textarea matInput  formControlName="limitTextarea"  
   type="text"  id="limitTextarea" name="limitTextarea" ></textarea>                   
</mat-form-field>  
1赞 Hezy Ziv 9/24/2023 #2

一种解决方案是在 本身上使用 *ngIf,而不是在 :<mat-form-field><textarea>

<button mat-raised-button color="primary" (click)="toggleTextBox()">Add</button>

<form [formGroup]="limitationForm">
  <ng-container *ngIf="showTextBox">
    <mat-form-field>
      <mat-label>Textarea</mat-label>
      <textarea matInput formControlName="limitTextarea" type="text" id="limitTextarea" name="limitTextarea"></textarea>
    </mat-form-field>
  </ng-container>
</form>