角度材料自动完成力选择不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了角度材料自动完成力选择不起作用相关的知识,希望对你有一定的参考价值。

使用角度材料进行自动完成,强制用户从自动完成中进行选择。我已经按照这个主题,但它似乎不起作用:

Angular Material Autocomplete force selection

我尝试了为输入和optionSelected添加模糊的方法。但似乎模糊事件总是在我的optionSelect之前触发,因此optionSeleced永远不会起火。

<mat-form-field class="example-full-width">
  <div formGroupName="CityGroup">
    <input (blur)="checkCity()" #autoComplInput type="text" placeholder="city" aria-label="Number" required matInput
      formControlName="cityName" [matAutocomplete]="auto">
    <mat-autocomplete #auto="matAutocomplete">
      <mat-option (click)="optionSelect(option,$event)" *ngFor="let option of filteredOptionsCity | async" [id]='0'
        [value]="option.cityName">
        {{option.cityName}}
      </mat-option>
    </mat-autocomplete>
  </div>
<mat-form-field>

TS

checkCity() {
    if (!this.selectedCity.cityName || 
    this.selectedCity.cityName !== this.form.get('CityGroup').get('cityName').value) {
        this.form.get('CityGroup').get('cityName').setValue('');
        this.selectedCity = '';
}


答案

您可以从FormControl订阅valueChanges并检查它是否有效。在模糊时,您可以检查它是否有效并清除它。像这样的东西:

html

<form class="example-form">
    <mat-form-field class="example-full-width">
        <input (blur)="blurInput()" type="text" placeholder="Pick one"
            aria-label="Number" matInput [formControl]="myControl" [matAutocomplete]="auto">
        <mat-autocomplete #auto="matAutocomplete">
            <mat-option *ngFor="let option of options" [value]="option">
                {{option}}
            </mat-option>
        </mat-autocomplete>
    </mat-form-field>
</form>

TS

export class HomeComponent implements OnInit {
  myControl = new FormControl();
  options: string[] = ['One', 'Two', 'Three'];
  isValid = false;

  constructor() { }

  ngOnInit() {
    this.myControl.valueChanges.subscribe(val => {
      let results = this.options.filter(option => {
        return option.toLowerCase().startsWith(val.toLowerCase());
      });
      this.isValid = results.length > 0;
    });
  }

  blurInput() {
    if (!this.isValid)
      this.myControl.setValue("");
  }
}

或者可以添加自定义验证器:https://stackoverflow.com/a/55375942

以上是关于角度材料自动完成力选择不起作用的主要内容,如果未能解决你的问题,请参考以下文章

材料角度自动完成:选择选项后如何在屏幕中保留垫子选项?

角材料自动完成不起作用,没有显示错误

方法在角度材料自动完成中被多次调用

分页在角度 7 中不起作用。(我使用角度材料)

角度材料布局-对齐空间-在 IE 中不起作用

自动完成材料 Angular 2 实施错误