AngularJs:如何在ngRepeat中添加自定义过滤器来操作小数?

时间:2016-02-22 08:21:51

标签: javascript angularjs angularjs-ng-repeat angular-filters

我有一个具有多个属性名称和值的对象,这些属性通过ng-repeat打印出来。此大对象中的两个对象称为currencyName和currencyPrice。

默认情况下,这些对象在后端有8位小数字硬编码到它们中,我的任务是操纵某个currencyName在显示页面中显示5位小数或8位小数。默认情况下,currencyPrices在后端有8位小数字硬编码到后端,由于该位代码在其他地方重复使用,因此无法触及。对于我正在处理的显示页面,我们使用过滤器|数字:默认为2。

我尝试创建一个自定义过滤器,它将定位主对象的数组,运行for循环/ forEach方法,定位currencyName对象,如果它匹配包含要操作的currencyNames的数组,则角度显示页面将显示5位小数(在这种情况下)。

这对我来说非常困难。我没有完整的代码将其粘贴到此处,但这里有一些示例代码来显示代码的外观。

<tr ng-repeat="full in fulls.mainList" class="animate-repeat">
  <td>{{full.currencyName}}</td>
  <td>{{full.tradedAverage | number:2}}</td>
  <td>{{full.tradedAmount | number:2}}</td>
  <td>{{full.currencyPrice | number:2}}</td>
</tr>
在这种情况下,

fulls是在控制器内部被解析的大对象。

2 个答案:

答案 0 :(得分:1)

测试了您的代码,它应该可以工作:

ui.R

http://jsfiddle.net/Lvc0u55v/1/

也许你有','而不是'。'在你的号码?

答案 1 :(得分:0)

请注意,在控制器中编写自己的函数非常容易,这些函数封装了小数位数的逻辑。

<tr ng-repeat="full in fulls.mainList" class="animate-repeat">
  <td>{{full.currencyName}}</td>
  <td>{{full.tradedAverage | number: (fnThatTellsTheNumberOfDecimals(full, 'tradedAverage')}}</td>
  <td>{{full.tradedAmount | number:(fnThatTellsTheNumberOfDecimals(full, 'tradedAmount')}}</td>
  <td>{{full.currencyPrice | number:(fnThatTellsTheNumberOfDecimals(full, 'currencyPrice')}}</td>
</tr>

然后在你的控制器中写下类似的东西:

$scope.fnThatTellsTheNumberOfDecimals = function(element, attr){
    if (attr === 'example' && element.type === 'some'){ return 2; }
    return 6;
};