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!*/}
@AlexKlaustriggerEl
是HTMLInputElement
而trigger
是指令实例嘿@yurzui你的样本现在坏了,我不知道如何手动打开触发器,对我来说,它似乎需要一点延迟,因为当点击它上面列出的元素时,当它点击打开的时候行,它仍然处于打开状态,所以不做任何操作,然后按正常行为将其关闭。设置超时看起来很脏,我想知道是否有更好的方法。谢谢!我在本stackblitz中更新了yurzui回答中的plunker: