在使用ng-repeat创建动态HTML表格列时,根据变量类型应用过滤器

时间:2016-07-14 07:45:53

标签: angularjs

我正在尝试使用以下数据创建动态HTML表:

myApp.controller('MyCtrl', function($scope) {

  $scope.data = [{
    id: 201,
    text: "Some Text",
    date: new Date("October 13, 2014 11:13:00")
  }, {
    id: 202,
    text: "Other Text",
    date: new Date("October 13, 2014 11:13:00")
  }];

});

HTML:

<div ng-controller="MyCtrl">
  <table>
    <tr>
      <th>ID</th>
      <th>Text</th>
      <th>Date</th>
    </tr>
    <tr ng-repeat="items in data">
      <td ng-repeat="item in items">{{item}}</td>
    </tr>
  </table>
</div>

enter image description here

但是我希望每次内部ng-repeat遇到日期类型时都应用日期过滤器,但是当它遇到任何其他类型(如字符串)时则不应用。我检查了一些已经可用的解决方案,但无法在这种情况下应用它们。

Here is the Fiddle.

1 个答案:

答案 0 :(得分:2)

应用date过滤器是最简单的解决方案。正如您在documentation中所看到的,它只会适用于日期:

  

返回   串
  如果输入未被识别为日期/毫秒,则格式化字符串或输入。

所以这是有效的:

<td ng-repeat="item in items">{{item | date}}</td>

即使item不是日期。

请参阅updated fiddle

<强>更新

由于你也有数值,我认为在代码中必须有一些不太通用的东西,以检查当前字段是否应该被视为日期。

请考虑以下事项:

<td ng-repeat="(key, item) in items">{{isDate(key) ? (item | date) : item}}</td>

控制器代码:

$scope.isDate = function(key) {
    if (key === 'date') {//add more conditions if necessary
        return true;
    }
    return false;
}

Fiddle