【问题标题】:Angular 6 Mat AutoComplete - Not Filtering as requiredAngular 6 Mat AutoComplete - 未按要求过滤
【发布时间】:2023-03-21 22:42:01
【问题描述】:

我在我的项目中使用 Angular Material 并使用 mat auto complete 来显示值。

我想通过 pipe Angular 中可用的功能过滤自动完成中的值。

<form [formGroup]="applicationUserForm">
    <mat-form-field style="width: 100%">
        <input type="text" matInput placeholder="Choose Department..." formControlName="department" [matAutocomplete]="autoGroup">
        <mat-autocomplete #autoGroup="matAutocomplete">
            <mat-optgroup *ngFor="let group of autoCompleteData | search: applicationUserForm.value.department" [label]="group.casinoName">
                    <mat-option *ngFor="let dept of (group.departments)">
          {{ dept.DEPARTMENTNAME }}
                    </mat-option>
            </mat-optgroup>
        </mat-autocomplete>
    </mat-form-field>
</form>

现在,在我当前的解决方案中,值正在被过滤,但我正在过滤值与 mat 组中的整个值。

如果过滤器与该值匹配,我只需要显示单个值。

我做了一个stackblitz。任何线索将不胜感激

https://stackblitz.com/edit/angular-material-with-angular-v5-8kj3u1?file=app/app.component.html

【问题讨论】:

    标签: angular angular-material2 angular6


    【解决方案1】:

    您需要过滤选项,而不仅仅是组:

    <mat-form-field style="width: 100%">
      <input type="text" matInput placeholder="Choose Department..." formControlName="department" [matAutocomplete]="autoGroup">
      <mat-autocomplete #autoGroup="matAutocomplete">
        <mat-optgroup *ngFor="let group of autoCompleteData | search: applicationUserForm.value.department" [label]="group.casinoName">
          <mat-option *ngFor="let dept of (group.departments) | searchOptions: applicationUserForm.value.department">
            {{ dept.DEPARTMENTNAME }}
          </mat-option>
        </mat-optgroup>
      </mat-autocomplete>
    </mat-form-field>
    

    显然创建一个新管道来使用这些选项:

    import { Pipe, PipeTransform } from '@angular/core';
    
    @Pipe({
      name: 'searchOptions'
    })
    export class SearchOptionsPipe implements PipeTransform {
    
      transform(items: Array<any>, args?: any): any {
        if (!args) {
          return items;
        }
        return items.filter(
          item => item.DEPARTMENTNAME.toLowerCase().indexOf(args.toLowerCase()) >= 0
        );
      }
    }
    

    【讨论】:

    • 但是如果值在第二个 mar 组中不可用,那么这种方法会显示另一个组标题。如果选项在该组中不可用,请告诉我如何确保完整的 optgroup 过滤器
    • 除了我在选项上的管道外,还可以在组上使用您的原始管道。
    猜你喜欢
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多