angular - 如果表单字段没有值,则隐藏 mat-table 列
问题描述
我是编程领域的新手,并且正在处理带有用于过滤的表单字段的表格。
如果表单字段有值,我想隐藏或显示表格列。
所以在我的 table.component.ts 中:
form:FormGroup = new FormGroup({
titleFormControl: new FormControl('')})
然后我声明这样的列:
columns = [
{
columnDef: 'title',
header: 'Titel',
cell: (element: Movie) => `${element.title}`,
hide: false,
}];
displayedColumns = this.columns.map(c => c.columnDef);
table.component.html
<form [formGroup]="form">
<mat-form-field appearance="fill">
<mat-label>Titel</mat-label>
<input type="text" matInput #titleFormControl placeholder="Titel">
</mat-form-field></form>
<mat-table #table [dataSource]="movies" class="mat-elevation-z8">
<ng-container *ngFor="let column of columns" [matColumnDef]="column.columnDef">
<th mat-header-cell *matHeaderCellDef hidden="column.hide">>
{{column.header}}
</th>
<td mat-cell *matCellDef="let row" hidden="column.hide">
{{column.cell(row)}}
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</mat-table>
如果 titleFormControl 有值,我如何显示该列。
或者我如何更新列数组字段隐藏和刷新表格。
我现在一无所知,希望能提供任何帮助。
解决方案
每个 FormControl 都有一个值,您可以使用 value 属性轻松读取该值。
https://material.angular.io/components/form-field/api#MatFormFieldControl
我相应地更改了您的示例,而不是将hide
列的属性设置为 false,而是将其设置为 a 的值titleFormControl
:
columns = [
{
columnDef: 'title',
header: 'Titel',
cell: (element: Movie) => `${element.title}`,
hide: this.titleFormControl.value
}];
displayedColumns = this.columns.map(c => c.columnDef);
另一个示例如何使用 FormControl 值来隐藏表格列。
推荐阅读
- vue.js - 使用 vue 观察 html 元素的变化
- c# - 通过 id 列表获取实体并检查它们是否存在
- sql-server - 导出到 Excel 时如何在 SQL Server Reporting Services 中动态更改文件名
- android - 在父应用和免安装应用之间共享数据
- amazon-web-services - 如何检查 dynamoDB 中是否已经存在 EmaiID?
- javascript - 我在通过引导程序响应我的页面 html 时遇到问题
- r - 使用 dplyr & purrr 检测每个数据框列的缺失值数量
- python - 在维护 Pip 安装的同时安全卸载 Anaconda
- ios - 无法从ios中的api解析双引号
- algorithm - 是否有将 L 系统转换为迭代函数系统的已知算法?