Kim*_*ern 3 angular-material angular
我有instructorControl = new FormControl();一个自动完成输入.autocompelte订阅this.instructorControl.valueChanges.当选择自动完成的建议或单击添加按钮时,当前输入值将被推送到数组并且输入将被清除this.instructorControl.patchValue('');.
选择自动填充选项后,不会再次打开自动填充选项菜单.为此,您必须输入内容或重新聚焦输入.
如果选择了建议,如何重新打开自动完成功能?
看到这个stackblitz.(9月18日更新)
<button md-button (click)="addInstructor()">add</button>
<md-input-container fxFlex>
<input mdInput name="instructor" placeholder="instructor" (keydown.enter)="addInstructor()" [mdAutocomplete]="instructorsAuto" [formControl]="instructorControl">
</md-input-container>
<md-autocomplete #instructorsAuto="mdAutocomplete">
<md-option *ngFor="let instructor of filteredInstructors | async" [value]="instructor" (click)="addInstructor()">
{{ instructor }}
</md-option>
</md-autocomplete>
{{instructors | json}}
Run Code Online (Sandbox Code Playgroud)
instructors: string[] = [];
instructorControl = new FormControl();
filteredInstructors: Observable<string[]>;
allInstructors = ['Max', 'Tirrell'];;
instructorsAuto;
ngOnInit() {
this.filteredInstructors = this.instructorControl.valueChanges
.startWith('')
.map(value => this.filterInstructors(value));
}
addInstructor() {
const instructor: string = this.instructorControl.value;
if (instructor) {
this.instructors.push(instructor);
this.instructorControl.patchValue('');
}
}
private filterInstructors(value: string = ''): string[] {
return this.allInstructors.filter(instructor => new RegExp(`${value}`, 'gi').test(instructor));
Run Code Online (Sandbox Code Playgroud)
我的建议是使用@ViewChild装饰器获取MdAutocompleteTrigger实例,然后openPanel()在其上触发方法.
为此:
1)将模板引用变量添加到input[autocomplete]元素:
<input #trigger ...
[mdAutocomplete]="instructorsAuto"
[formControl]="instructorControl">
Run Code Online (Sandbox Code Playgroud)
2)声明由@ViewChild财产装饰.
import { MdAutocompleteTrigger } from '@angular/material'
...
@ViewChild('trigger', { read: MdAutocompleteTrigger }) trigger: MdAutocompleteTrigger;
^^^^^^^^^^^^^^^^^^^^^^^^^
make sure you're getting the right instance from template reference
Run Code Online (Sandbox Code Playgroud)
3)在你的addInstructor方法中使用它:
this.trigger.openPanel();
Run Code Online (Sandbox Code Playgroud)
Stackblitz示例(2018年9月更新)
| 归档时间: |
|
| 查看次数: |
3962 次 |
| 最近记录: |