0

我有一个角度自动完成树组件,我对自动完成面板宽度有疑问。

我有两个要求可以单独解决,但不能一起解决:

  • 一旦内容比面板宽,面板应该会增长。我用过[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)
  };

堆栈闪电战

4

2 回答 2

0

我已经回顾了你的 stackblitz 示例。

看起来更像是一个CSS问题。

autocomplete-simple-example.css在文件上试试这个

.example-form {
  min-width: 150px;
  // max-width <-- remove it to use 100% of width
  width: 100%;
}

.example-full-width {
  width: 100%; // add this to use all width.
  transition: width 0.5s ease;
}
.mat-focused {
  width: 270px;
}

一个工作示例在这里:stackblitz

编辑

您可以将任何有效的 css 添加到width css. 以这种方式添加calc(100% - 60%)了一个使其与输入相同的固定

.example-form {
  min-width: 150px;
  width: 100%;
}

.example-full-width {
  width: 100%;
  transition: width 0.5s ease;
}
.mat-focused {
  width: 100%;
}
<mat-autocomplete (opened)="opened()" panelWidth="calc(100% - 60px)" </mat-autocomplete>

工作示例

于 2021-01-19T13:39:28.640 回答
0

面板 elementRef 在(未打开)opened事件被触发后显示。更具体地说,在面板被添加到 DOM 之后。所以只需添加一个setTimeout我得到元素的作品。不幸的是,这意味着元素以错误的宽度显示,然后跳转到输入的宽度。

可能有更好的解决方案,但这就是我现在要做的。

 opened = ()=> {
    let inputWidth = this.autoInput.nativeElement.getBoundingClientRect().width
    setTimeout(()=>{
      let panel = this.autocomplete.panel?.nativeElement;

      if (!panel ) return
      panel.style.minWidth = inputWidth + "px";
    })
  }

工作堆栈闪电战

于 2021-01-20T11:41:16.157 回答