我想创建一个表,根据不同的过滤器对列的数据进行格式化。
假设我有一个如下所示的数组对象:
$scope.components = [
{lastName:'Bob', firstName:'John',netWorth:1000},
{lastName:'Foo', firstName:'Bar',netWorth:2000}
];
现在我想使用ng-repeat
将数据填充到表中。我是这样做的:
<tr ng-repeat="component in components">
<td ng-repeat="column in tableColumns">
{{component[column]}}
</td>
</tr>
上面的$scope.components
是一个简单的例子,但重点是我有这样的数据对象,它们的属性一致但根据对象而不同。这就是为什么我有第二个ng-repeat
允许用户定义tableColumns
内的内容。在我们的示例中,tableColumns
是一个字符串数组:$scope.tableColumns = ['lastName','firstName','netWorth']
。
该表行为正常。主要问题是,如何使用特定过滤器格式化每个列?比方说,对于表的第一列,即lastName
属性,我希望使用uppercase
过滤器格式化它,表格的第二列,即firstName
属性lowercase
1}}过滤器,以及带有netWorth
过滤器的最后一列currency
属性。
我的思维过程将是这样的:
<td ng-repeat="column in tableColumn>
{{component[column] | filterArray}}
</td>
其中$scope.filterArray
是我想要的过滤器字符串数组,如'uppercase'
,'currency'
等。这个字符串数组应该按照tableColumn数组也是。例如,要获得上述所需的格式,我必须按如下方式声明$scope.arrayFilter
:$scope.arrayFilter=['uppercase','lowercase','currency']
有什么想法吗?
答案 0 :(得分:1)
我认为你可以为那些使用$filter
服务的人编写自己的过滤器。
因此,您的过滤器将如下所示:
app.filter('custom', ['$filter', function ($filter) {
return function (value, type) {
return $filter(type)(value);
}
}]);
现在您可以通过下一种方式使用此方法:{{value | custom : filterName}}
,例如:
{{component[column] | custom : 'uppercase'}}
现在您只需要创建一个包含列名称及其过滤器名称的对象,如下所示:
$scope.filterArray = {
'lastName': 'uppercase',
'firstName': 'lowercase',
'netWorth': 'currency'
};
现在您的HTML代码将如下所示:
<tr ng-repeat="component in components">
<td ng-repeat="column in tableColumns">{{component[column] | custom : filterArray[column]}}</td>
</tr>
一切似乎都在演示中。希望,这对你有所帮助。
答案 1 :(得分:0)
你可以这样做:
<td ng-repeat="column in tableColumn>
<label ng-if="column === 1">
{{component[column] | uppercase}}
</label>
<label ng-if="column === 2">
{{component[column] | lowercase}}
</label>
...
</td>
或者你可以像你说的那样使用有序的arrayFilter