2015-05-20 43 views
3

我对AngularJS非常陌生,所以我很抱歉如果我问一些愚蠢的东西(我很可能会这么做)。传递给自定义过滤器的数据undefined

我已创建自定义过滤器:

angular.module("customFilters", []) 
    .filter("mainGroups", function() { 
     return function(data) { 
      var results = []; 
      console.log(data); 
      for (var i = 0; i < data.length; i++) { 
       if (data[i].mainGroup == 1 || data[i].mainGroup == 2 || data[i].mainGroup == 3) { 
        results.push(data[i]); 
       } 
      } 

      return results; 
     } 
    }); 

我应用该过滤器:

ng-options="group.description for group in data.mainGroups.itemMainGroups | mainGroups | orderBy: 'description'" 

在控制台(通过的console.log)我可以清楚地看到数据是阵列15个物体。 Angular.isArray(data)也返回true。不过,我得到这些错误:

TypeError: Cannot read property 'length' of undefined 

我在做什么错在这里?

+5

你可以创建一个小提琴吗? – Zee

回答

0

我设法只是执行代码时angular.isArray(data)是真正解决问题的自己。我不知道为什么这个工程,但至少它..

angular.module("customFilters", []) 
     .filter("mainGroups", function() { 
      return function(data) { 
       if (angular.isArray(data)) { 
        var results = []; 
        console.log(data); 
        for (var i = 0; i < data.length; i++) { 
         if (data[i].mainGroup == 1 || data[i].mainGroup == 2 || data[i].mainGroup == 3) { 
         results.push(data[i]); 
         } 
        } 

        return results; 
       } else { 
        return data; 
       } 
     }); 
+1

您是否从休息服务中加载选项列表?也许数据可能未完成加载... – Michael

0

你的过滤器似乎工作。它可能是一个数据问题。

angular.module("customFilters", []) 
 
    .controller('myController', function($scope) { 
 
    $scope.data = [{ 
 
     id: 1, 
 
     mainGroup: 1, 
 
     description : 'M' 
 
    }, { 
 
     id: 2, 
 
     mainGroup: 2, 
 
     description : 'N' 
 
    }, { 
 
     id: 3, 
 
     mainGroup: 3, 
 
     description : 'A' 
 
    }, { 
 
     id: 4, 
 
     mainGroup: 4, 
 
     description : 'H' 
 
    }, { 
 
     id: 5, 
 
     mainGroup: -1, 
 
     description : 'S' 
 
    }, { 
 
     id: 6, 
 
     mainGroup: 1, 
 
     description : 'B' 
 
    }, { 
 
     id: 7, 
 
     mainGroup: 2, 
 
     description : 'R' 
 
    }, { 
 
     id: 8, 
 
     mainGroup: 3, 
 
     description : 'G' 
 
    }, ]; 
 
    }) 
 
    .filter("mainGroups", function() { 
 
    return function(data) { 
 
     var results = []; 
 
     console.log(data); 
 
     for (var i = 0; i < data.length; i++) { 
 
     if (data[i].mainGroup == 1 || data[i].mainGroup == 2 || data[i].mainGroup == 3) { 
 
      results.push(data[i]); 
 
     } 
 
     } 
 

 
     return results; 
 
    } 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="customFilters" ng-controller="myController"> 
 
    <select ng-model="myColor" ng-options="group.description for group in data | mainGroups | orderBy:'description'" ></select> <span>Show 6 out of 8 entries</span> 
 
    <div ng-repeat="item in data | mainGroups"><pre ng-bind="item | json"></pre> 
 
    </div> 
 
</div>

相关问题