Angular 清除时重新打开“角度材质自动完成”

Angular 清除时重新打开“角度材质自动完成”,angular,angular-material,Angular,Angular Material,我有一个输入instructorControl=newformcontrol()具有自动完成功能。自动补偿订阅此.instructor控制.valueChanges。 选择“自动完成”的建议或单击“添加”按钮时,将当前输入值推送到数组中,并使用this.instructorControl.patchValue(“”)清除输入 选择自动完成选项后,不会再次打开自动完成选项菜单。为此,您要么键入内容,要么重新聚焦输入 选择建议后,如何使自动完成重新打开 看这个。(9月18日更新) app.compo

我有一个输入
instructorControl=newformcontrol()具有自动完成功能。自动补偿订阅
此.instructor控制.valueChanges
。 选择“自动完成”的建议或单击“添加”按钮时,将当前输入值推送到数组中,并使用
this.instructorControl.patchValue(“”)清除输入

选择自动完成选项后,不会再次打开自动完成选项菜单。为此,您要么键入内容,要么重新聚焦输入

选择建议后,如何使自动完成重新打开

看这个。(9月18日更新)

app.component.html
添加
{{讲师}
{{讲师| json}}
app.component.ts
讲师:字符串[]=[];
instructorControl=新表单控件();
过滤器结构:可观察;
allInstructors=['Max','Tirrell'];;
讲师;
恩戈尼尼特(){
this.filteredInstructors=this.instructorControl.valueChanges
.startWith(“”)
.map(值=>this.filterStructors(值));
}
加法器(){
常量讲师:字符串=this.instructorControl.value;
if(讲师){
这个。讲师。推(讲师);
此.instructorControl.patchValue(“”);
}
}
私有筛选器结构(值:string=''):string[]{
返回这个.allInstructors.filter(讲师=>newregexp(`${value}','gi').test(讲师));

我的建议是使用
@ViewChild
decorator获得
mdautocompletettrigger
实例,然后在其上启动
openPanel()
方法

为此,请执行以下操作:

1) 将模板引用变量添加到
输入[autocomplete]
元素:


2) 声明由
@ViewChild
属性修饰

从“@angular/material”导入{mdautocompletettrigger}
...
@ViewChild('trigger',{read:mdautocompletettrigger})trigger:mdautocompletettrigger;
^^^^^^^^^^^^^^^^^^^^^^^^^
确保从模板引用中获得正确的实例
3) 在
addInstructor
方法中使用它:

this.trigger.openPanel();

(2018年9月更新)

Günter Zöchbauer的
read
属性解释。基本上,我们强烈键入一个元素,否则会显示为
ElementRef
@AlexKlaus yurzui的read属性解释谢谢@yurzui!顺便问一句,您知道如何将
trigger
元素的引用传递给HTML并仍然能够调用
mdautocompletettrigger
的方法?例如,对于
Panic!
函数验证(auto:MdAutocompleteTrigger){/*auto在这里只是ElementRef!*/}
@AlexKlaus
triggerEl
HTMLInputElement
trigger
是指令实例嘿@yurzui你的样本现在坏了,我不知道如何手动打开触发器,对我来说,它似乎需要一点延迟,因为当点击它上面列出的元素时,当它点击打开的时候行,它仍然处于打开状态,所以不做任何操作,然后按正常行为将其关闭。设置超时看起来很脏,我想知道是否有更好的方法。谢谢!我在本stackblitz中更新了yurzui回答中的plunker: