Angular Material - md-autocomplete 下拉列表的宽度

Angular Material - md-autocomplete dropdown's width

我正在使用来自 Angular Material 的 md-autocompletehere

下拉菜单的宽度似乎与输入字段的宽度一致。如果项目的文本太长,则有 ellipsis.

但是,我想显示项目的全文,同时保持输入字段的宽度相对较短。也就是说,下拉菜单的宽度应随其内容扩展。

我尝试检查 md-autocomplete 元素的样式,但找不到任何可以解决问题的样式。有什么想法吗?

编辑:

这是我最终拥有的风格:

.md-autocomplete-suggestions-container{
    overflow-y:scroll
}

.md-autocomplete-suggestions-container .md-virtual-repeat-scroller{
    position:static
}

.md-autocomplete-suggestions-container .md-virtual-repeat-sizer{
    height:0 !important
}

.md-autocomplete-suggestions-container .md-virtual-repeat-offsetter{
    position:static
}

不过还有一个问题。 overflow-y:scroll 始终显示垂直滚动条,即使在不需要时也是如此。如果我将其更改为 overflow-y:auto,垂直滚动条出现时将创建 ellipsis。我该如何解决?

您可以使用 css 来设置 md-virtual-repeat-container 的样式。

但是,这会为您网站上可能拥有的 md-virtual-repeat-container 每个 实例设置样式(即 md-autocompletemd-virtual-repeat) .

遗憾的是,目前没有调整单个 md-autocomplete 下拉菜单的选项。我创建了一个 ticket and pull request 来希望解决这个问题。祈祷这将包含在 Angular Material.

的未来版本之一中

祝你好运!

您需要在 md-autocomplete 元素上设置 class,以便可以在 css 中定位它。看这个例子

  <md-autocomplete class="autocompletable"  
              md-min-length="0" 
              ... 
              placeholder="US State?" 
              md-menu-class="autocompletable-contents">
              <md-item-template>
                 <table>
                    <tr>
                        <td><span md-highlight-text="ctrl.searchText" 
                            md-highlight-flags="^i">{{item.ok}}</span>
                        </td><td>Foo</td>
                    </tr>
                 </table>
              </md-item-template>
              <md-not-found>
                 No states matching "{{ctrl.searchText}}" were found.
                 <a ng-click="ctrl.newState(ctrl.searchText)">Create a new one!</a>
              </md-not-found>
           </md-autocomplete>

然后在 css 你需要这样做

  md-autocomplete.autocompletable{ width: 200px; }
  .autocompletable-contents{ }

EDITS:使用材料 1.0.9

进行测试

我很晚才知道,但是在材料 1.1.9 中,您可以在 md-autocomplete 指令上添加一个属性 md-menu-class

您添加的 class 将报告在虚拟重复中的 .md-autocomplete-suggestions 元素上。因此,您只能为此自动完成自定义 css。

例如:

 <md-autocomplete ...  md-menu-class="search-field-autocomplete">

将生成

<ul class="md-autocomplete-suggestions search-field-autocomplete" ... >              
    <li md-virtual-repeat="item in $mdAutocompleteCtrl.matches" ...

因此您可以使用 css 进行自定义,例如:

.md-autocomplete-suggestions.search-field-autocomplete {
  li {
    color: red;
  }
}

对于仍然面临自动完成值被裁剪问题的任何人,因为面板宽度仅与字段一样宽,好消息是它现在已得到修复,哇哦!

Angular Material 版本 6.4.0 (2018-07-16) 引入了以下功能,

  • autocomplete: 允许面板具有自动宽度值 (#11879) (8a5713e)

所以现在可以只添加值为 auto 的 属性 panelWidth,面板将增长以适应这些值。

<mat-autocomplete panelWidth="auto">
      <mat-option value="myValue">Now an option with a long label will still be readable<option>
</mat-autocomplete>