如何在 setValue 之后突出显示 angular mat-autocomplete 中的选项值?
How to highlight option value in angular mat-autocomplete after setValue?
这是最简化的代码示例:
https://stackblitz.com/edit/angular-8r153h-wcvefg?file=app/autocomplete-sample.ts
问题是:当我手动设置 formControl 值时,所选项目未在列表中突出显示:
this.formControl.setValue("second");
但是如果我点击这个项目,那么这个项目就会突出显示:
我看到突出显示的是选项已垫选 class。
也许有人对如何在 setValue 之后突出显示该项目有任何想法?
您可以传递 stateCtrl
的值,并将其添加到您的条件中以检查该值是否也存在:
<span [innerHTML]="state.name | highLight: toHighlight : stateCtrl.value"></span>
然后对该值进行额外检查:
transform(text: string, search: string, ctrlValue: string): string {
// ....
return (search && ctrlValue) ? text.replace(regex, match => `<b>${match}</b>`) : text;
}
自动完成-sample.html
<form>
<mat-form-field>
<input matInput [formControl]="formControl" [matAutocomplete]="autoComplete">
<mat-autocomplete #autoComplete="matAutocomplete">
<mat-option [ngClass]="(formControl.value===option.description)?'mat-selecte-default':''" *ngFor="let option of filteredOptions | async" [value]="option.description">
{{option.description}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
自动完成-sample.css
.mat-selected {
background: darkblue !important;
color: lightgray !important;
}
.mat-selecte-default {
background: darkblue !important;
color: lightgray !important;
}
这是最简化的代码示例: https://stackblitz.com/edit/angular-8r153h-wcvefg?file=app/autocomplete-sample.ts
问题是:当我手动设置 formControl 值时,所选项目未在列表中突出显示:
this.formControl.setValue("second");
但是如果我点击这个项目,那么这个项目就会突出显示:
我看到突出显示的是选项已垫选 class。
也许有人对如何在 setValue 之后突出显示该项目有任何想法?
您可以传递 stateCtrl
的值,并将其添加到您的条件中以检查该值是否也存在:
<span [innerHTML]="state.name | highLight: toHighlight : stateCtrl.value"></span>
然后对该值进行额外检查:
transform(text: string, search: string, ctrlValue: string): string {
// ....
return (search && ctrlValue) ? text.replace(regex, match => `<b>${match}</b>`) : text;
}
自动完成-sample.html
<form>
<mat-form-field>
<input matInput [formControl]="formControl" [matAutocomplete]="autoComplete">
<mat-autocomplete #autoComplete="matAutocomplete">
<mat-option [ngClass]="(formControl.value===option.description)?'mat-selecte-default':''" *ngFor="let option of filteredOptions | async" [value]="option.description">
{{option.description}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
自动完成-sample.css
.mat-selected {
background: darkblue !important;
color: lightgray !important;
}
.mat-selecte-default {
background: darkblue !important;
color: lightgray !important;
}