ng-repeat隐藏属性,如果它等于DateTime.MinValue

时间:2016-07-15 12:08:28

标签: javascript html angularjs

我试图隐藏单元格(不是完整的行),其中的日期等于DateTime.MinValue,基本上是0001-01-01T00:00:00

这是我的观点模型:

$scope.vm.users = [
    {
        "Username": "user1",
        "EarliestLogin": "0001-01-01T00:00:00",
        "LatestLogin": "0001-01-01T00:00:00"
    },
    {
        "Username": "user2",
        "EarliestLogin": "2016-07-15T11:18:19Z",
        "LatestLogin": "2016-07-15T11:18:19Z"
    },
    {
        "Username": "user3",
        "EarliestLogin": "0001-01-01T00:00:00",
        "LatestLogin": "0001-01-01T00:00:00"
    }
];

表格如下:

<table>
  <tr>
      <th>User Name</th>
      <th>Earliest Login</th>
      <th>Latest Login</th>
  </tr>
  <tr ng-repeat="user in vm.users">
      <td>{{user.Username}}</td>
      <td>{{user.EarliestLogin | date:'short'}}</td>
      <td>{{user.LatestLogin | date:'short'}}</td>
   </tr>
</table>

当前输出:

User Name   Earliest Login  Latest Login
user1   1/1/01 12:00 AM 1/1/01 12:00 AM
user2   7/15/16 1:18 PM 7/15/16 1:18 PM
user3   1/1/01 12:00 AM 1/1/01 12:00 AM

期望输出:

User Name   Earliest Login  Latest Login
user1   
user2   7/15/16 1:18 PM 7/15/16 1:18 PM
user3   

我可以使用ng-repeat上的过滤器隐藏整行,但我不知道如果只隐藏一个单元格DateTime.MinValue ...

这是我的plnkr

2 个答案:

答案 0 :(得分:3)

乍一看,您可以创建辅助功能

$scope.vm.isDateTimeMinValue = function (value) {
    return value === "0001-01-01T00:00:00";
};

并在模板中使用

<tr ng-repeat="user in vm.users">
    <td>{{user.Username}}</td>
    <td><span ng-hide="vm.isDateTimeMinValue(user.EarliestLogin)">{{user.EarliestLogin | date:'short'}}</span></td>
    <td><span ng-hide="vm.isDateTimeMinValue(user.LatestLogin)">{{user.LatestLogin | date:'short'}}</span></td>
</tr>

Plunker

注意!您可以使用相应的服务将"0001-01-01T00:00:00"定义为Angular JS constant

答案 1 :(得分:1)

ng-if条件放在span单元格内的td标记上,将$scope.DateTime.MinValue视为具有所需最小值的应变变量:

<tr ng-repeat="user in vm.users">
   <td>{{user.Username}}</td>
   <td><span ng-if="$scope.DateTime.MinValue != user.EarliestLogin">{{user.EarliestLogin | date:'short'}}</span></td>
   <td><span ng-if="$scope.DateTime.MinValue != user.LatestLogin ">{{user.LatestLogin | date:'short'}}</span></td>
</tr>