我可以将过滤器传递给html吗?

时间:2015-05-18 13:42:20

标签: angularjs angularjs-filter

我在表格中有多个字段,我只是使用ng-repeat显示,但是需要格式化它们,是否有某种方法可以将过滤器从范围传递给html? 下面的代码不起作用:

<tr ng-repeat="info in array">
     <td>{{info.key}}</td>
     <td class="table-detail-panels">{{ info.value | info.filter }}</td>
</tr>

aslo不知道我是否应该传递字符串或过滤器对象

info.filter = 'date' // or
info.filter = $filter('date')

EDIT1:info.filter是一个变量,它可以有不同的过滤器,而不仅仅是'date'

EDIT2:值得一提的是ng-repeat在我正在建立的指令/控制中。此控件的目的是能够以合理的方式显示此世界中存在的所有内容,这就是我需要过滤器的原因。或者将它们添加到controll的简单方法。

解答: 浏览片刻后,我在堆栈上找到答案: https://stackoverflow.com/questions/21491747/apply-formatting-filter-dynamically-in-a-ng-repeat

2 个答案:

答案 0 :(得分:1)

根据我的理解,您希望根据某些条件以不同方式过滤数组中的值。如果是这样,我建议您使用控制器内的过滤器,然后重复格式化预格式化。如果需要,可以使用ng-bind-HTML和ngsanitize:

module.controller('MyCtrl', ['$scope', 'customFilter1', 'customFilter2',
    function ($scope, custom1, custom2) {

        // however you are creating your array - do the logic here
        if(something) {
           $scope.variable = custom1(arg)
        } else {
           $scope.variable = custom2(arg)
        }


     }
])

**这是一般性的想法,显然它不会完全像上面所写的那样工作。我经常使用相同的想法,当我不能100%确定将传递什么数据并且想要格式化字符串时,数字会有所不同。

答案 1 :(得分:0)

Angular已经内置了。只需使用:

<td class="table-details-panels">{{info.value | date: 'dd-MM-yyy'}}</td>

如果您只想过滤一些td

<td ng-if="needsToBeFilteredCondition" class="table-details-panels">{{info.value | date: 'dd-MM-yyyy'}}</td>
<td ng-if="!needsToBeFilteredCondition" class="table-details-panels">{{info.value}}</td>