Javascript 对控制器中的承诺对象调用$filter的正确方法?

Javascript 对控制器中的承诺对象调用$filter的正确方法?,javascript,angularjs,angularjs-service,Javascript,Angularjs,Angularjs Service,我有这个用于分页的分叉代码,它工作得很好,但在我做了一些调整,使它从Json文件中grub数据后,它就停止工作了。 查看代码工作注释行:[13、14、15],然后取消注释行:[16->37]。 这个错误是关于$filter函数的一个问题,当从Json文件中获取数据时,它返回undefined,因此我认为,因为对象是一个承诺,现在它破坏了$filter函数,所以我不确定。 此2函数(使用Json调用)中发生错误: $scope.search=函数(){ $scope.filteredItems=$

我有这个用于分页的分叉代码,它工作得很好,但在我做了一些调整,使它从Json文件中grub数据后,它就停止工作了。
查看代码工作注释行:[13、14、15],然后取消注释行:[16->37]。
这个错误是关于$filter函数的一个问题,当从Json文件中获取数据时,它返回undefined,因此我认为,因为对象是一个承诺,现在它破坏了$filter函数,所以我不确定。
此2函数(使用Json调用)中发生错误:

$scope.search=函数(){
$scope.filteredItems=$filter('filter')($scope.items,函数(item){
对于(项目中的var attr){
if(searchMatch(项[attr],$scope.query)){
返回true;
}
}
返回false;
});
//注意分拣顺序
如果($scope.sortingOrder!=''){
$scope.filteredItems=$filter('orderBy')($scope.filteredItems,$scope.sortingOrder,$scope.reverse);
}
$scope.currentPage=0;
//现在按页面分组
$scope.groupToPages();
};
//计算页面位置
$scope.groupToPages=函数(){
$scope.pagedItems=[];
对于(变量i=0;i<$scope.filteredItems.length;i++){
如果(i%$scope.itemsPerPage==0){
$scope.pagedItems[Math.floor(i/$scope.itemsPerPage)]=[$scope.filteredItems[i]];
}否则{
$scope.pagedItems[Math.floor(i/$scope.itemsPerPage)].push($scope.filteredItems[i]);
}
}
};
错误消息:

TypeError:无法读取未定义的属性“length”
位于对象$scope.grouptopage(controllers.js:66:45)
在对象处。$scope.search(controllers.js:61:12)
在newcontrollers.MainCtrl中(controllers.js:99:10)


任何帮助都要提前感谢。

问题是在$http承诺返回之前调用了筛选器,因此items对象未定义。
本节中提到的解决方案。
我需要这样做:

Items.then(function(data) {
    $scope.items = data;
    //call $scope.search here, instead of calling it on line 100
    $scope.search();
});
因此,现在的工作。
感谢谷歌AngularJS小组中的Florian Orben。

如果
groupToPages
是您所指的“2函数”,那么我在其中看不到任何“Json调用”。此外,您的错误消息与上下文无关,因此在这里没有任何意义。你能设置一个plunker吗?在我的帖子的第一行有一个plunker的链接。
Items.then(function(data) {
    $scope.items = data;
    //call $scope.search here, instead of calling it on line 100
    $scope.search();
});