我有一个具有100多个属性的对象,例如“name”,“price”,“expiry date”等等 我正在使用ng-repeat来遍历对象的所有键对值并将它们显示在表格上。
<table class="table">
<tr ng-repeat="x in attr_array">
<td><b>{{x.key}}</b></td>
<td>{{x.value}}</td>
</tr>
</table>
但我想对某些属性使用Angular日期过滤器,例如任何日期字段:
{{ x.value | date: 'MMM d, y'}}
理想情况下也是其他过滤器。我怎么能这样做呢?
答案 0 :(得分:2)
这不是简单而优雅的方法。您无法使用动态过滤器,因此您可以选择不太喜欢的顺序:
以下是自定义过滤器方法的示例:
angular.module('demo', [])
.controller('MainCtrl', function($scope) {
$scope.attr_array = [
{key: 'created', value: new Date, filter: ['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: ['limitTo', 10] }
]
})
.filter('transform', function($filter) {
return function(value, filter) {
var filterData = [].concat(filter);
filterData.splice(1, 0, value);
return $filter(filterData.shift()).apply(this, filterData);
}
})
&#13;
<script src="https://code.angularjs.org/1.4.9/angular.js"></script>
<table ng-app="demo" ng-controller="MainCtrl" class="table">
<tr ng-repeat="x in attr_array">
<td><b>{{ x.key }}</b>
</td>
<td>{{ x.value | transform:x.filter }}</td>
</tr>
</table>
&#13;
答案 1 :(得分:2)
我尝试重新创建您的问题并使用ng-if
解决了问题。
在angular namespace中似乎有一个函数来检查我通过范围注入视图的日期,字符串,数字等每种类型。
另请注意,我使用ng-repeat="(key, value) in ..."
假设您正在迭代对象source。
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body ng-app="app" ng-controller="RootController">
<table>
<tr ng-repeat="(key, value) in attr_array">
<td><b>{{key}}</b>
</td>
<td>
<span ng-if="isDate(value)">{{value | date: 'MMM d, y'}}</span>
<span ng-if="isNumber(value)">{{value | number: 4}}</span>
<span ng-if="isString(value)">{{value | uppercase}}</span>
</td>
</tr>
</table>
<script>
angular.module('app', [])
.controller('RootController', function($scope) {
$scope.isDate = angular.isDate;
$scope.isNumber = angular.isNumber;
$scope.isString = angular.isString;
$scope.attr_array = {
date: new Date(),
str: "hello",
nm: 50.2
};
});
</script>
</body>
</html>