Angularjs 如何在对象属性的重复上有条件地应用角度过滤器?

Angularjs 如何在对象属性的重复上有条件地应用角度过滤器?,angularjs,angularjs-ng-repeat,conditional,angular-filters,Angularjs,Angularjs Ng Repeat,Conditional,Angular Filters,我有一个100+属性的对象,比如“名称”、“价格”、“到期日”…等等 我使用ng repeat遍历对象的所有密钥对值,并将它们显示在表中 <table class="table"> <tr ng-repeat="x in attr_array"> <td><b>{{x.key}}</b></td> <td>{{x.value}}</td> </tr

我有一个100+属性的对象,比如“名称”、“价格”、“到期日”…等等 我使用ng repeat遍历对象的所有密钥对值,并将它们显示在表中

<table class="table">
    <tr ng-repeat="x in attr_array">
        <td><b>{{x.key}}</b></td>
        <td>{{x.value}}</td>
    </tr>
</table>

理想情况下,也可以使用其他过滤器。我怎样才能做到这一点呢?

这不是一个简单而优雅的方法。您不能使用动态筛选,因此您的选择按优先顺序排列,而不是按不太优先顺序排列:

  • 在控制器中动态设置日期字段
  • 使用ngIf/ngShow开关
  • 编写自定义筛选器,根据某些配置应用另一个筛选器
以下是自定义筛选方法的示例:

angular.module('demo',[])
.controller('MainCtrl',函数($scope){
$scope.attr\u数组=[
{键:'created',值:new Date,筛选器:['Date','MMM d,y']},
{key:'name',value:'Thomas Mann',filter:'uppercase'},
{key:'price',value:1233.45,filter:'number'},
{key:'description',value:'Some long string',filter:['limito',10]}
]
})
.filter('transform',函数($filter){
返回函数(值、过滤器){
变量filterData=[].concat(过滤器);
过滤器数据拼接(1,0,值);
返回$filter(filterData.shift()).apply(this,filterData);
}
})

{{x.key}}
{x.value | transform:x.filter}

我试图重新创建您的问题,并用
ng if
解决了它。 angular名称空间中似乎有一个函数,用于检查我通过作用域注入视图的每个类型,如日期、字符串、数字。
另外请注意,我在…中使用了
ng repeat=“(key,value)”,假设您在对象上进行迭代


JS-Bin
{{key}}
{{value}日期:'mmmd,y'}
{{value}编号:4}
{{value}大写}
角度.module('app',[])
.controller('RootController',函数($scope){
$scope.isDate=angular.isDate;
$scope.isNumber=angular.isNumber;
$scope.isString=angular.isString;
$scope.attr\u数组={
日期:新日期(),
str:“你好”,
纳米:50.2
};
});

可以使用
ng if=“x.value instanceof Date”
作为td元素的属性。对每个数据类型重复,理想情况下,我要应用多个filters@sniels如果
使用
ng是否意味着
元素求值为
FALSE
将不会显示?我仍然希望显示所有
元素,但对其中一些元素应用过滤器。
{{ x.value | date: 'MMM d, y'}}