【发布时间】:2021-04-23 17:39:18
【问题描述】:
我有一个有角度的自动完成树组件,但我对自动完成面板的宽度有疑问。
我有两个要求可以单独解决,但不能一起解决:
- 一旦内容比面板宽,面板应该会增大。我为此使用了
[panelWidth] = "auto",效果很好。 - 面板应具有主机输入的最小宽度。也可以为此使用 panelWidth ,但我失去了第一点的功能。
来自Change the mat-autocomplete width?)我看到我可以使用[panelWidth] = "auto"。
我知道我可以使用 css 样式
.mat-autocomplete-panel{min-width: "300px"} 但不知道如何获取具体输入的宽度。
所以我求助于javascript。我在文档中看到 AutocompletePanel 公开了面板 ElementRef,但是无论我做什么,这个值 似乎都是未定义的?使用@ViewChild 获取此值的正确方法是什么?
我有以下代码在 opened 事件上运行。
<mat-autocomplete #autocomplete (opened)="opened()" [panelWidth]="auto" #auto="matAutocomplete">
@ViewChild("auto") autocomplete: MatAutocomplete;
@ViewChild("autoTreeInput") autoTreeInput: ElementRef;
opened = () => {
setTimeout(()=>{
let p = this.autocomplete.panel?.nativeElement; //always null because panel is undefi
console.log("opened", p, this.autocomplete);
if (!p ) return
p.style.minWidth =
this.autoTreeInput.nativeElement.getBoundingClientRect().width + "px";
},1000)
};
【问题讨论】:
标签: javascript angular angular-material mat-autocomplete