У меня есть угловой компонент дерева автозаполнения, и у меня проблема с шириной панели автозаполнения.
У меня есть два требования, которые я могу решить индивидуально, но не вместе:
- Панель должна увеличиваться, когда контент становится шире панели. Я использовал
[panelWidth] = "auto"
для этого, и он отлично работает. - Панель должна иметь минимальную ширину входа хоста. Для этого также можно использовать panelWidth, но тогда я теряю функциональность в первом пункте.
Из Изменить ширину автозаполнения мата?) я увидел, что могу использовать [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)
};