Jad*_*dda 1 angular-components angular mat-autocomplete angular11
我在 Angular 项目中有自定义 Mat Auto Complete。它有 2 个后缀:清除按钮和下拉按钮。当我单击清除按钮时,代码this.myControl.reset('', { emitEvent: true });会重置输入值。但下拉面板打不开。我尝试使用以下格式但没有成功
自动完成显示示例.ts
.......
clearInput() {
this.arrowIcon = "arrow_drop_down";
this.myControl.reset('', { emitEvent: true });
}
......
Run Code Online (Sandbox Code Playgroud)
自动完成显示示例.html
<form class="example-form">
<mat-form-field class="example-full-width">
<mat-label>Assignee</mat-label>
<input
type="text"
matInput
[formControl]="myControl"
[matAutocomplete]="auto"
/>
<div matSuffix style="display:flex">
<button
*ngIf="myControl!==undefined && myControl.value!==null && myControl?.value!==''"
mat-icon-button
aria-label="Clear"
(click)="clearInput()"
type="button"
>
<mat-icon>clear</mat-icon>
</button>
<button mat-icon-button aria-label="Clear" type="button">
<mat-icon>{{arrowIcon}}</mat-icon>
</button>
</div>
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn" (opened)="arrowIcon='arrow_drop_up'"
(closed)="arrowIcon='arrow_drop_down'" (optionSelected)="arrowIcon='arrow_drop_down'">
<mat-option *ngFor="let option of filteredOptions | async" [value]="option">
{{option.name}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
<!-- Copyright 2020 Google LLC. All Rights Reserved.
Use of this source code is governed by an MIT-style license that
can be found in the LICENSE file at http://angular.io/license -->
Run Code Online (Sandbox Code Playgroud)
好的,当我单击“清除”图标时,它会重置表单控件并关闭面板。要解决此问题,我们可以手动打开面板。将MatAutocompleteTrigger与 一起注入到该方法中event
请参阅更新的StackBlitz 演示。
openPanel(evt: any, trigger: MatAutocompleteTrigger): void {
evt.stopPropagation();
this.myControl?.reset();
trigger.openPanel();
this.inputAutoComplete?.nativeElement.focus();
}
Run Code Online (Sandbox Code Playgroud)
添加 #trigger="matAutocompleteTrigger"到输入并将其传递给按钮click()方法
自动完成显示示例.html
<form class="example-form">
<mat-form-field class="example-full-width">
<mat-label>Assignee</mat-label>
<input #inputAutoComplete
[formControl]="myControl"
[matAutocomplete]="auto"
#trigger="matAutocompleteTrigger"
matInput
type="text"
/>
<div matSuffix style="display:flex">
<button
(click)="openPanel($event, trigger)"
*ngIf=" myControl?.value!==null && myControl?.value!==''"
aria-label="Clear"
mat-icon-button
type="button"
>
<mat-icon>clear</mat-icon>
</button>
<button aria-label="Clear" mat-icon-button type="button">
<mat-icon>{{arrowIconSubject.getValue()}}</mat-icon>
</button>
</div>
<mat-autocomplete #auto="matAutocomplete" (closed)="arrowIconSubject.next('arrow_drop_down')"
(opened)="arrowIconSubject.next('arrow_drop_up')" (optionSelected)="arrowIconSubject.next('arrow_drop_down')"
[displayWith]="displayFn">
<mat-option *ngFor="let option of filteredOptions | async " [value]="option">
{{option.name}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
Run Code Online (Sandbox Code Playgroud)