使用AngularJS中的ng-style和百分比值设置HTML元素宽度

met*_*bed 41 javascript css data-binding json angularjs

我有一个包含百分比值的JSON响应对象.例如:

{
    completionPercent: 42
}
Run Code Online (Sandbox Code Playgroud)

我的目标UI结果是:

????????????????????????????????????????????????????
|?????????????????????                             |
????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

JSON对象用作ng-modelAngularJS中的元素.现在我想将它绑定completionPercent为AngularJS中元素的宽度.但CSS width期望一个String '42%',而不是一个数字.所以以下方法不起作用:

<div id="progressBackground" ... >
    <div id="progressBar"
         ng-model="..."
         ng-style="{ 'width': completionPercent }"
         ... ></div>
</div>
Run Code Online (Sandbox Code Playgroud)

目前,我通过在控制器中生成整个样式来实现此功能:

ng-style="getStyleFromCompletionPercent()"
Run Code Online (Sandbox Code Playgroud)

但这不是一个好主意,因为扩展它变得非常困难ng-style.还有另一种隐式指定宽度为百分比的方法吗?这样的事情是理想的:

ng-style="{ 'width-percentage': completionPercent }"
Run Code Online (Sandbox Code Playgroud)

And*_*rew 73

ng-style属性中的代码是javascript对象,因此您可以在宽度值的末尾附加百分比符号.当您将字符串附加到数字时,它还会将width的值转换为字符串.

<div id="progressBackground" ... >
    <div id="progressBar"
         ng-model="..."
         ng-style="{ 'width': completionPercent + '%' }"
         ... ></div>
</div>
Run Code Online (Sandbox Code Playgroud)


小智 8

实现这一目标的另一种方法是

[style.width.%]="completionPercent"
Run Code Online (Sandbox Code Playgroud)

在你的代码中

<div id="progressBackground" ... >
<div id="progressBar"
     ng-model="..."
     [style.width.%]="completionPercent"
     ... ></div>
Run Code Online (Sandbox Code Playgroud)


Hoc*_*eyJ 6

为了搜索者的利益,如果您需要填充该区域,但最后留下一些空间(例如,提供文本细节),可以通过类似于以下代码的方式实现:

<div ng-style="{'width': 'calc('+completionPercent+'% - 250px)'}">&nbsp;</div>
Run Code Online (Sandbox Code Playgroud)

显然,这只适用于兼容CSS3的浏览器,但它可以动态扩展.


Sac*_*hra 5

如果您想避免 Angular JS 应用程序中的观察者。我们可以使用以下语法:

1. 像素 - [style.max-width.px]="value"
2. EM - [style.max-width.em]="value"
3. 百分比 - [style.max-width.%]="value" "
*