我已经实现了自动完成功能,没有错误,一切似乎都没问题,但绝对没有任何反应。我在输入字段中输入内容,似乎没有任何操作,控制台中没有显示任何内容。
HTML
<form>
<mat-form-field>
<input type="text" matInput [formControl]="myControl" [matAutocomplete]="auto">
</mat-form-field>
<mat-autocomplete #auto="matAutocomplete">
<mat-option *ngFor="let n of testValues" [value]="n">
{{n}}
</mat-option>
</mat-autocomplete>
</form>
TS
import { MatAutocomplete } from '@angular/material/autocomplete';
import { FormControl } from '@angular/forms';
...
public testValues = ['one', 'two', 'three', 'four'];
public myControl: FormControl;
...
constructor() {
this.myControl = new FormControl();
}
编辑:我已导入
import {MatAutocompleteModule} from '@angular/material/autocomplete';
在我的app模块中。
材料版本 -
"@angular/material": "^5.0.0-rc.2",
答案 0 :(得分:8)
您在.ts
您必须以这种方式订阅myControl
valueChanges
:
this.myControl.valueChanges.subscribe(newValue=>{
this.filteredValues = this.filterValues(newValue);
})
因此,每当您的表单控件值发生更改时,您都会调用自定义filterValues()
方法,该方法应如下所示:
filterValues(search: string) {
return this.testValues.filter(value=>
value.toLowerCase().indexOf(search.toLowerCase()) === 0);
}
因此,您使用testValues
数组作为基础数组,并在html中使用filteredValues
数组:
<mat-option *ngFor="let n of filteredValues" [value]="n">
{{n}}
</mat-option>
过滤不是自动过滤的,您必须使用自定义方法过滤选项。希望它有所帮助