使用ng-click更新表列中的每个单元格

时间:2016-05-26 06:40:17

标签: angularjs

我是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;
  }

然后我的表更新了该值。但是,如果该列中的每个表格单元格具有不同的值,我基本上希望通过我已经制作的过滤器运行该值。

有关如何处理此问题的任何建议?

3 个答案:

答案 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
}