角度材质 - md-autocomplete下拉列表的宽度

时间:2016-06-02 05:18:37

标签: javascript angularjs angular-material md-autocomplete

我正在使用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。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

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

但是,这样会对您网站上的md-virtual-repeat-container的每个实例进行设置(即md-autocompletemd-virtual-repeat)。

不幸的是,目前还没有调整单个md-autocomplete下拉菜单的选项。我创建了一个ticket and pull request来帮助解决这个问题。手指交叉,这将包含在未来版本的Angular Material中。

祝你好运!

答案 1 :(得分:3)

您需要在md-autocomplete元素上设置类,以便可以在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{ }

编辑:使用材料1.0.9进行测试

答案 2 :(得分:1)

我知道它很晚但在材料1.1.9中你可以在md-menu-class指令上添加属性md-autocomplete

您添加的类将在虚拟重复中的.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;
  }
}

答案 3 :(得分:0)

对于仍然因为面板宽度仅与字段一样宽而仍面临自动填充值裁剪问题的任何人,好消息是它现已修复,呜呼!

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

  • 自动完成:允许面板的宽度值为auto(#11879)(8a5713e

因此现在可以仅将属性panelWidth添加为auto值,并且面板将增大以适合这些值。

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