angular-material 输入插件

angular-material input with an addon

我正在尝试使用 angular-material. I want to achieve a similar effect as with bootstrap's .input-group-addon 创建一个带有额外文本的输入:

我得到的最接近的是 this:

<md-content layout-padding>
    <div layout="row" class="md-whiteframe-z1" style="width: 40%">
        <md-select placeholder="Type" ng-model="discount.type" flex="50" class="md-select-full-width">
            <md-option value="AMOUNT">Amount</md-option>
            <md-option value="PERCENT">Percent</md-option>
        </md-select>
        <div flex="50" layout="row" layout-align="center center">
            <md-input-container flex>
                <label>Value</label>
                <input ng-model="discount.value">
            </md-input-container>
            <span>%</span>
        </div>
    </div>
</md-content>

什么给出了以下结果:

如您所见,2 个字段未对齐。

我也尝试在 <span>%</span> 上使用 vertical-align 而不是 layout-align="center center" 但它似乎被忽略了。

我想出了一个解决方案 <md-icon>:

<md-content layout-padding>
    <div layout="row" class="md-whiteframe-z1" style="width: 40%">
        <md-select placeholder="Type" ng-model="discount.type" flex="50" class="md-select-full-width">
            <md-option value="AMOUNT">Amount</md-option>
            <md-option value="PERCENT">Percent</md-option>
        </md-select>
        <div flex="50" layout="row">
            <md-input-container flex>
                <label>Value</label>
                <input ng-model="discount.value">
            </md-input-container>
            <md-icon md-font-set="regular-font">%</md-icon>
        </div>
    </div>
</md-content>

"regular-font" 是一些不存在的图标字体库,以确保 <md-icon> 中的文本不会被解释为 Material 图标。

现在对齐很好:

您可以在此处查看有效的解决方案:http://codepen.io/LukaszWiktor/pen/oXoqYg

当您希望附加组件包含的内容超过单个字符时,我也想出了一种方法来执行此操作,使用 flexbox。

<md-input-container flex>
    <label>Length</label>
    <input type="number" ng-model="length" flex="80">
    <span flex>seconds</span>
</md-input-container>

重要的部分是 input 元素上的 flex="80"span 元素上的 flex。这是告诉 input 占据 space 的 80%,让 span 填充剩余部分(至少我这么认为——我还在学习 flexbox)。

最终结果如下所示:

我让它看起来更像 bootstrap 这样的样式:

<md-input-container class="md-block">
     <label for="discount">Discount</label>
     <input style="text-align: right; padding-right: 15px;" type="text" id="discount" ng-model="discount" ng-change="updateDiscount()">
     <span style="margin-top: 5px; position: absolute; right: 0;">%</span>
</md-input-container>

供您查看的屏幕截图: