如何使用 if 语句隐藏 HTML 元素?
How to hide a HTML element using an if-statement?
我的应用程序允许用户将文件上传到数据库,我还有一个 mat-select 组件,用户可以在其中 select 他们想要的 excel 工作表上传。
如果用户 select 是 CSV 文件,我想隐藏这个 mat-select 组件,但是我的 [hidden]="hideDropdown" 似乎不起作用。
hideDropdown: boolean;
if (this.file.type == "text/csv") {
this.hideDropdown = true;
} else {
this.hideDropdown = false;
}
<mat-form-field *ngIf="sourceFile" id="worksheetStyle" appearance="fill">
<mat-label>Excel Worksheet</mat-label>
<mat-select [hidden]="hideDropdown" [(ngModel)]="selectedSheet" (selectionChange)="selectWorksheet()">
<mat-option *ngFor="let worksheet of worksheetNames" [value]="worksheet">
{{worksheet}}
</mat-option>
</mat-select>
</mat-form-field>
我认为 [hidden] 属性不起作用的原因是因为它不存在于 mat-select 上,仅存在于 html-tags 上,因为它是核心 html 属性。您可以改为使用 *ngIf,如下所示:
<mat-select *ngIf="hideDropDown" [(ngModel)]="selectedSheet"
(selectionChange)="selectWorksheet()">
<mat-option *ngFor="let worksheet of worksheetNames" [value]="worksheet">
{{worksheet}}
</mat-option>
</mat-select>
但是应该注意的是,*ngIf 将从 DOM 中完全删除 select,而 [hidden] 只是将显示:none 应用于元素,因此具有它仍然在 DOM 中呈现。因此,如果您创建了一个预期具有 select 输入的响应式表单,那么如果您使用 ngIf 将其删除,则会导致错误。但是,您似乎只是在单独使用 select 和 ngModel,所以这对您来说应该不是问题。
编辑 1:
工作 stackblitz 展示了一个可能的解决方案:
https://stackblitz.com/edit/angular-5ykmue?file=src/app/select-overview-example.html
编辑 2:
我纠正了无法使用 [hidden] 属性的错误,如果您将 form-field 包裹在 div 中,您可以使用 hidden 来显示/隐藏,如下所示:
<div [hidden]="hideDropdown">
<mat-form-field *ngIf="sourceFile" id="worksheetStyle" appearance="fill">
<mat-label>Excel Worksheet</mat-label>
<mat-select [(ngModel)]="selectedSheet" (selectionChange)="selectWorksheet()">
<mat-option *ngFor="let worksheet of worksheetNames" [value]="worksheet">
{{worksheet}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
我的应用程序允许用户将文件上传到数据库,我还有一个 mat-select 组件,用户可以在其中 select 他们想要的 excel 工作表上传。
如果用户 select 是 CSV 文件,我想隐藏这个 mat-select 组件,但是我的 [hidden]="hideDropdown" 似乎不起作用。
hideDropdown: boolean;
if (this.file.type == "text/csv") {
this.hideDropdown = true;
} else {
this.hideDropdown = false;
}
<mat-form-field *ngIf="sourceFile" id="worksheetStyle" appearance="fill">
<mat-label>Excel Worksheet</mat-label>
<mat-select [hidden]="hideDropdown" [(ngModel)]="selectedSheet" (selectionChange)="selectWorksheet()">
<mat-option *ngFor="let worksheet of worksheetNames" [value]="worksheet">
{{worksheet}}
</mat-option>
</mat-select>
</mat-form-field>
我认为 [hidden] 属性不起作用的原因是因为它不存在于 mat-select 上,仅存在于 html-tags 上,因为它是核心 html 属性。您可以改为使用 *ngIf,如下所示:
<mat-select *ngIf="hideDropDown" [(ngModel)]="selectedSheet"
(selectionChange)="selectWorksheet()">
<mat-option *ngFor="let worksheet of worksheetNames" [value]="worksheet">
{{worksheet}}
</mat-option>
</mat-select>
但是应该注意的是,*ngIf 将从 DOM 中完全删除 select,而 [hidden] 只是将显示:none 应用于元素,因此具有它仍然在 DOM 中呈现。因此,如果您创建了一个预期具有 select 输入的响应式表单,那么如果您使用 ngIf 将其删除,则会导致错误。但是,您似乎只是在单独使用 select 和 ngModel,所以这对您来说应该不是问题。
编辑 1:
工作 stackblitz 展示了一个可能的解决方案: https://stackblitz.com/edit/angular-5ykmue?file=src/app/select-overview-example.html
编辑 2:
我纠正了无法使用 [hidden] 属性的错误,如果您将 form-field 包裹在 div 中,您可以使用 hidden 来显示/隐藏,如下所示:
<div [hidden]="hideDropdown">
<mat-form-field *ngIf="sourceFile" id="worksheetStyle" appearance="fill">
<mat-label>Excel Worksheet</mat-label>
<mat-select [(ngModel)]="selectedSheet" (selectionChange)="selectWorksheet()">
<mat-option *ngFor="let worksheet of worksheetNames" [value]="worksheet">
{{worksheet}}
</mat-option>
</mat-select>
</mat-form-field>
</div>