我是Angular的新手,我试图找出如何将数据放在表格中的一列中,当用户点击表格顶部时,我将其从一种数字格式转换为另一种格式细胞。我已经创建了一个过滤器,但我不知道如何调用它以便影响表格中的所有单元格。
<tr ng-repeat="x in data">
<td>{{x.id}}</td>
<td>{{x.name}} </td>
<td>{{x.desc}}></td>
<td>{{x.number}}</td> <--- THIS IS WHAT I WANT TO CONVERT
</tr>
我甚至不知道从哪里开始。我基本上有一个ng-click指令调用&#34;转换&#34;这是我在控制器中定义的。我知道如果我在$ scope中定义一个变量(例如$ scope.foo =&#34; 1&#34;)然后调用convert()函数,我可以替换这样的值:
$scope.convert = function(){
$scope.foo = 2;
}
然后我的表更新了该值。但是,如果该列中的每个表格单元格具有不同的值,我基本上希望通过我已经制作的过滤器运行该值。
有关如何处理此问题的任何建议?
答案 0 :(得分:2)
你说你已经有过滤器? 然后给你的过滤器一个参数'numberFormat':
angular.
module('yourModule').
filter('yourFilter', function() {
return function(input, numberFormat) {
// convert the input according to the numberFormat
return filteredValue;
};
});
然后您可以更新convert()范围方法中的格式:
$scope.convert = function(){
$scope.numberFormat = 'long';
}
并将其传递给您的过滤器:
<td>{{x.number | yourFilter:numberFormat}}</td>
顺便说一句: 阅读控制器 - 恕我直言,在控制器上存储值比直接在示波器上存储更好的做法。
答案 1 :(得分:1)
您的函数只需要更新number
数组中每个对象的data
属性。你可以这样做:
$scope.convert = function() {
$scope.data.forEach(function(item) {
item.number = item.number + 2; // Convert number somehow
});
};
答案 2 :(得分:1)
我假设列的表头上的click handler如下所示
<th ng-click="convert()">column of number</th>
在控制器中写下如下函数
$scope.convert = function() {
$scope.data.forEach(function(obj) {
obj.number += 1;
})
//$scope.$apply() use this is template is not refreshed
}