AngularJS:ng-repeat(返回单值)

时间:2014-05-28 09:44:42

标签: javascript angularjs if-statement ng-repeat

哟大家好! 我有:

<tr ng-repeat="x in list">
.....<td>{{x.Name}}</td>

,视图是:

a
a
a
a

目前,一切都是对的 但是如果此表中已经存在“Name”,我希望该表只返回一次值。我需要的是这个观点:

a

因为“姓名”拥有许多“a”值。

我希望我对我的问题足够准确,因为我是AngularJS的新手。 谢谢。


EDIT1 :我的控制器视图:     myApplicationModule.controller('controllertable',['$ scope','$ routeParams',function($ scope,$ routeParams)     {         $ scope.list = list;     }]);

引用文件.json:

var list = [
{
    ...
    "Name" = "a",
    ...
}

2 个答案:

答案 0 :(得分:2)

试试这个

创建以下过滤器

app.filter('unique', function() {
     return function(list, keyname) {
      var output = [], 
          keys = [];

      angular.forEach(list, function(item) {
          var key = item[keyname];
          if(keys.indexOf(key) === -1) {
              keys.push(key);
              output.push(item);
          }
      });

      return output;
   };
});

并像

一样使用它
<table>
    <tr ng-repeat="x in list | unique: 'name'">
    <td>{{x.name}}</td>
  </table>

答案 1 :(得分:1)

您可以注册自定义过滤器。

angular.module('yourApp.filters', [])
    .filter('distinct', function() {
        return function (list) {
            var distinctList = new Array();
            var j = 0;
            for (var i = 0; i < list.length; i++) {
                var x = list[i];
                if (! containsName(distinctList, x.Name)) {
                    distinctList[j] = list[i];
                    j++;
                }
            }
            return distinctList;
        }
    });

function containsName(list, name) {
    for (var i = 0; i < list.length; i++) {
        if (list[i].Name == name) {
            return true;
        }
    }
    return false;
}

在控制器中,将数组列表添加到$ scope:

yourAppControllers.controller('YourCtrl', ['$scope', function ($scope) {
    $scope.list = [
        {
            Name: 'A',
            email: 'a1@example.com'
        },
        {
            Name: 'B',
            email: 'b@example.com'
        },
        {
            Name: 'A',
            email: 'a2@example.com'
        },
        {
            Name: 'C',
            email: 'cc@example.com'
        }
    ];
}]);

现在在ng-repeat语句中写下:

<table>
    <tr ng-repeat="x in list | distinct">
         <td>{{x.Name}}</td>
    </tr>
</table>