如何在 Angular-Material 设计中使用 md-icon 和 md-autocomplete?

How to use md-icon with md-autocomplete in Angular-Material Design?

有没有办法把md-icon放在md-autocomplete中

   <md-autocomplete 
       md-selected-item="ctrl.selectedItem"
       md-search-text-change="ctrl.searchTextChange(ctrl.searchText)"
       md-search-text="ctrl.searchText"
       md-items="item in ctrl.querySearch(ctrl.searchText)"
       md-item-text="item.display"
       placeholder="What is your favorite US state?">

   <md-icon class="material-icon">search</md-icon> // ofcourse, I think It won't work

  </md-autocomplete>

codepen

angular-material(开箱即用)尚不可行。 看到这个 closed issue.

作为解决方法,您可以通过一些自定义来做一些类似的事情 CSS。

查看关于此的示例 working plunker

HTML:(注意 idmd-input-name )

<md-autocomplete id="custom" md-input-name="autocompleteField".../>

CSS:

#custom input[name="autocompleteField"]  {
    background: url(images/search.icon.png);
    background-repeat: no-repeat;
    background-position: 5px 7px;
    padding: 0px 35px;
}

希望对您有所帮助。

我认为这个问题与 md-autocomplete 内部有一个 md-input-container 这一事实有关。

这就是我最终要做的,以显示一行均匀间隔的输入字段,第一个是 md-autocomplete。

值得注意的是,我不得不将另外两个 md-input-container 包装在 flexed dif 中。

<div layout="column" layout-gt-xs="row">
    <div layout="row" flex layout-align="start start">
      <md-input-container>
      <!-- it looks like in angular material md-icon needs to be surrounded by a div -->
        <div><md-icon class="yellow-fg" md-font-icon="icon-white-balance-sunny"></md-icon></div>
      </md-input-container>
      <md-autocomplete flex usual_attributes_here>
        (...)
      </md-autocomplete>
    </div>
    <div layout="row" flex>
      <md-input-container flex>
        <md-icon md-font-icon="icon-numeric"></md-icon>
        (...)
      </md-input-container>
    </div>
    <div layout="row" flex>
      <md-input-container flex>
        <md-icon md-font-icon="icon-numeric"></md-icon>
        (...)
      </md-input-container>
    </div>
</div>

另一种方法是将图标附加到 md-autocomplete 内的 md-input-container。 md-input-container 仅在您使用 md-floating-label 属性时附加。

JS:超时和编译是使图标出现所必需的。通过附加 md-icon-left class,输入接收 36px 的填充,就像每个其他 md-input-container 有一个图标

attrs[[=​​39=]]将使用属性值作为图标名称

  ...
  .directive('appendIcon', appendIcon);

  function appendIcon($timeout, $compile) {
    return {
      restrict: 'A',
      link: function(scope, elem, attrs) {
        var vm = this;
        $timeout(function() {
          var container = angular.element(elem[0].querySelector('md-input-container'));

          container.addClass('md-icon-left');
          var icon = $compile('<md-icon class="material-icons">' + attrs[vm.name] + '</md-icon>')(scope);
          container.append(icon);
        });
      }
    };
  };

HTML:注意 append-icon="search" 和 md-floating-label="State"

  <md-autocomplete 
   append-icon="search"
   md-floating-label="State"
   id="custom" flex="" 
   required=""

这是一个代码笔: http://codepen.io/eydrian/pen/ZLdgwQ

我更喜欢下面的方法,以便能够使用 .svg 图标。我不仅可以继续使用 Material 设计图标,还可以用它制作按钮,以触发事件,例如打开菜单等,提供帮助信息等。

<div style="float: left; padding: 25px 10px 0 4px;">
    <md-icon md-svg-icon="/images/icons/email.svg" class="input-icon-color"></md-icon>
</div>
<div style="overflow: hidden;">
    <md-autocomplete 
        md-selected-item="ctrl.selectedItem"
        md-search-text-change="ctrl.searchTextChange(ctrl.searchText)"
        md-search-text="ctrl.searchText"
        md-items="item in ctrl.querySearch(ctrl.searchText)"
        md-item-text="item.display"
        placeholder="What is your favorite US state?">

        <md-icon class="material-icon">search</md-icon>
    </md-autocomplete>
</div>

以下样式是在 <md-input-container> 中使用时模仿 .svg 图标的颜色:

<style>
.input-icon-color {
    color: rgba(0,0,0,0.87);
}
</style>

因为这是有人希望将图标添加到 angular material 自动完成

的热门 link 之一

如果你想使用新 angular material 做同样的事情,可以通过在输入字段后使用 mat-icon 轻松完成

<form class="example-form">
  <mat-form-field class="example-full-width">
    <input type="text" placeholder="Pick one" aria-label="Number" matInput [formControl]="myControl" [matAutocomplete]="auto">
      <mat-icon matSuffix>search</mat-icon>
    <mat-autocomplete #auto="matAutocomplete">
      <mat-option *ngFor="let option of filteredOptions | async" [value]="option">
        {{option}}
      </mat-option>
    </mat-autocomplete>
  </mat-form-field>
</form>

stackblitz link 举个例子 https://stackblitz.com/angular/kbmrnjeydjm