2013-03-08 2 views
0

이 분기 코드 plunker은 잘 작동했지만 Json 파일에서 데이터를 잘라내 기 위해 조정을 한 후에 작동을 멈 춥니 다.
주석 줄을 사용하는 코드를 보려면 : [13, 14, 15], 줄의 주석을 제거하십시오 : [16 -> 37].
$ Json 파일에서 데이터를 가져올 때 오류가 $ filter 함수와 관련하여 정의되지 않은 값으로 반환되므로 $ filter 함수가 중단 된 약속이므로 개체가 확실하지 않습니다.
오류합니다 (JSON 호출로)이 두 기능에서 발생합니다

$scope.search = function() { 
    $scope.filteredItems = $filter('filter')($scope.items, function (item) { 
    for(var attr in item) { 
     if (searchMatch(item[attr], $scope.query)){ 
     return true; 
     } 
    } 
    return false; 
    }); 
    // take care of the sorting order 
    if ($scope.sortingOrder !== '') { 
    $scope.filteredItems = $filter('orderBy')($scope.filteredItems, $scope.sortingOrder, $scope.reverse); 
    } 
    $scope.currentPage = 0; 
    // now group by pages 
    $scope.groupToPages(); 
}; 
// calculate page in place 
$scope.groupToPages = function() { 
    $scope.pagedItems = []; 
    for (var i = 0; i < $scope.filteredItems.length; i++) { 
    if (i % $scope.itemsPerPage === 0) { 
     $scope.pagedItems[Math.floor(i/$scope.itemsPerPage)] = [ $scope.filteredItems[i] ]; 
    } else { 
     $scope.pagedItems[Math.floor(i/$scope.itemsPerPage)].push($scope.filteredItems[i]); 
    } 
    } 
}; 

오류 메시지 : 사전에

TypeError: Cannot read property 'length' of undefined
          at Object.$scope.groupToPages (controllers.js:66:45)
          at Object.$scope.search (controllers.js:61:12)
          at new controllers.MainCtrl (controllers.js:99:10)

어떤 도움 감사합니다.

+0

만약'groupToPages'가 당신이 말하는 "2 함수"라면 나는 "Json call"을 본 적이 없습니다. 또한 오류 메시지가 컨텍스트를 벗어나므로 여기서 아무 것도 의미하지 않습니다. 플 런커를 설치할 수 있습니까? – Stewie

+0

첫 번째 줄에는 내 게시물에 플 런커 링크가 있습니다. –

답변

1

문제는 $ http에서 약속이 반환되기 전에 필터가 호출되어 items 객체가 정의되지 않았기 때문입니다.
Google groups post (proper way to call $filter in the controller?)에서 언급 된 용액.
나는이 작업을 수행해야합니다

Items.then(function(data) { 
    $scope.items = data; 
    //call $scope.search here, instead of calling it on line 100 
    $scope.search(); 
}); 

그래서 plunker가 작동합니다. Google AngularJS 그룹의 Florian Orben에게 감사드립니다.

관련 문제