【发布时间】:2021-10-21 11:34:40
【问题描述】:
我有一个带有 DataSource 集的 Angular Material 表,并且正在使用 Material Table Filter 过滤数据。我有几个材料自动完成,而不是常规输入,它们从表中的唯一值源填充他们的选项。就其本身而言,这些自动完成功能可以正常工作 - 如果您在一个名称中搜索一个名称,选项会过滤到表中可用的内容。多个自动完成会出现问题,因为我无法找到一种方法让第二个自动完成更新其选项与当前过滤的数据,而不是显示每个值。它应该只显示来自当前过滤数据的选项。
这是我的自动完成功能之一:
<!-- Filter by Course Code -->
<label for="courseCode">Course Code</label>
<input type="text"
id="courseCode"
[matAutocomplete]="auto1"
[formControl]="filterCourseCodesControl"
[(ngModel)]="filterEntity.courseCode"
#filterCourseCode
>
<mat-autocomplete #auto1="matAutocomplete" >
<mat-option [value]="item" *ngFor="let item of filteredCodes | async" [value]="item">
{{item}}
</mat-option>
</mat-autocomplete>
*ngFor 中的filteredCodes 是一个可观察的:filteredCodes: Observable<string[]>;,第二个自动完成使用它自己的列表filteredClaimedBy: Observable<string[]>;。
OnInit 我正在从一项服务中获取唯一代码/claimedBy 的列表,这里正在使用它:
this.filteredCodes = this.filterCourseCodesControl.valueChanges.pipe(
startWith(''),
map(value => this._filterCodes(value))
);
private _filterCodes(value: string): string[] {
const filterValue = this._normalizeValue(value);
return this.uniqueCodes.filter(item => this._normalizeValue(item).includes(filterValue));
}
我相信这就是一切;第二个自动完成使用与第一个类似的功能,uniqueCodes 更改为uniqueClaimedBy,等等。
我已经将[displayWith] 指令视为一种可能使输入更新的方法,但对于一个人来说,无法弄清楚如何使用它,即使使用它,我也不知道它会使其他自动完成在第一个更改时更新其值,反之亦然。
【问题讨论】:
标签: angular typescript angular-material mat-autocomplete