在Angular Material输入框中添加图标

8
我正在尝试将搜索图标添加到我的输入搜索栏,使用的是Angular Material库:

<aside class="main-sidebar">
    <section class="sidebar control-sidebar-dark" id="leftMenu">
        <div>
            <!--  need to disable overflow-x somehow cuz of menu -->
            <md-tabs md-center-tabs id="menuTabs" md-dynamic-height="true" md-selected="selectedIndex">

                <md-tab label="<i class='fa fa-search'></i>" ng-if="handleResize()" search-Focus>
                    <md-content class="control-sidebar-dark" ng-style="{'height' : menuHeight}">
                        <!-- search Menu -->
                        <div>
                            <div>
                                <form action="javascript:void(0)" method="get" class="sidebar-form" id="searchForm">
                                    <div>
                                    <md-content md-theme="docs-dark">
                                        <md-input-container style="padding-bottom: 5px;">
                                            <label>{{isEnglish ? 'Search...' : 'Recherche...'}}</label>
                                            <input ng-model="searchInput" id="sInput" ng-change="filterCartoList(searchInput)" my-enter="filterCartoList(searchInput)">
                                        </md-input-container>
                                    </md-content>
                                    </div>

                                </form>
                                <div>

我想复制这个示例中的图标:http://codepen.io/anon/pen/rOxMdR,但是我遇到了样式问题,什么都不能正常工作。

您有什么想法可以简单地将搜索图标添加到我的现有输入框中吗?


你想在哪里添加 icon?在表单内部吗? - gaurav bhavsar
最好在文本输入框的左侧或右侧,最好是右侧。 - Ellone
请检查我在答案中添加的可工作的 Plunker。 - gaurav bhavsar
2个回答

5

由于您正在使用 angular-material-designfont-awesome-icon,请使用具有 md-font-icon 属性的 <md-icon> 元素。

并且与 md-inout-container 一起使用 class="md-icon-float"

工作的plunker

将此更改为:

<md-content md-theme="docs-dark">
    <md-input-container style="padding-bottom: 5px;">
        <label>{{isEnglish ? 'Search...' : 'Recherche...'}}</label>
        <input ng-model="searchInput" id="sInput" ng-change="filterCartoList(searchInput)" my-enter="filterCartoList(searchInput)">
    </md-input-container>
</md-content>

收件人:

<md-content md-theme="docs-dark">
    <md-input-container class="md-icon-float">
        <label>{{isEnglish ? 'Search...' : 'Recherche...'}}</label>
        <md-icon md-font-icon="fa fa-search"></md-icon>
        <input ng-model="searchInput" id="sInput" ng-change="filterCartoList(searchInput)" my-enter="filterCartoList(searchInput)">
    </md-input-container>
</md-content>

是的,我尝试过了,但图标会以缩小的尺寸向上移动,就像我们聚焦输入时输入框的占位符一样。您可以在此处查看占位符的行为:https://material.angularjs.org/latest/#/demo/material.components.input - Ellone
你是否添加了 class="md-icon-float"?像这样 <md-input-container class="md-icon-float"> - gaurav bhavsar
好的,我在你的编辑后也尝试了那个方法,但问题是内容的高度变得太大了,而且输入内容中出现了滚动条。我希望有一个像最后一个示例中电子邮件那样带有图标的单行输入框:https://material.angularjs.org/latest/#/demo/material.components.input - Ellone
Plunker 的示例和 Angular-Material 网站中的 Email 输入框没有什么区别,唯一的区别是 Email 输入框没有标签但有占位符。我会再次更新 Plunker。 - gaurav bhavsar
是的,但我的会出现滚动条,这可能是因为它的某个父元素:aside > section > md-tabs > md-tab > md-content > form > md-content > md-input-container > input - Ellone

1
这个问题很老了,但今天早上我遇到了同样的问题,@gaurav的答案与OP在此链接中所寻找的不同:https://material.angularjs.org/latest/#/demo/material.components.input 如果您打开Chrome开发者控制台,您可以检查该元素,并查看编写演示代码的人在底部图标部分的电子邮件输入方面使用了自定义类。 我基本上复制了那种行为以实现相同的期望效果。
HTML:
<md-input-container class="md-block md-icon-left">
    <md-icon class="form-icon">lock_outline</md-icon>
    <label>Password</label>
    <input 
        type="password" ng-model="user.password" name="password" 
        ng-required="true" 
        ng-keyup="$event.keyCode == 13 && loginForm.$valid && login()"/>
</md-input-container>

CSS:
/* Angular extension */
md-input-container.md-input-invalid > md-icon.form-icon {
  color: #B71C1C;
}

需要注意的是,我不得不将类“md-icon-left”添加到我的md-container中,否则图标会堆叠在输入框上方。我在我的项目中使用angular material v1.1.0和angular js v1.5.5。希望这个答案能帮助其他想要实现与Angular Material演示相同行为的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接