2014-05-20 2 views
0

나는 자바 스크립트에서 사용자 정의 필터를 호출하기 위해 스팬 (span)을 사용하는 d 각형 앱을 보유하고 있습니다. 이 필터는 잘 작동하고 원하는 결과를 얻을 수있다기능 후에도 각도 필터 이상한 오류가 발생합니다.

app.filter('sumCompletedCredits', function() { 
      return function (mpttdetails) { 
       var sum = 0; 
       mpttdetails.forEach(function (detail) { 
        sum += detail.student_academic_credit.credit; 
       }); 
       return sum; 
      }; 
     }); 

:

<span class="badge badge-success" ng-bind="mpttdetails | filter:{category.id:{{node.id}}} | sumCompletedCredits"></span> 

이 내가 내 필터를 정의하는 방법입니다 : 이것은 내 HTML 범위이다. 내가 콘솔을 검사 할 때 다음과 같이 그러나 그것은 나에게 오류를 던지고있다 :

TypeError: Cannot call method 'forEach' of undefined 
    at Scope.<anonymous> (http://127.0.0.1:8000/static/js/app.js:116:23) 
    at fnInvoke (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.js:10011:21) 
    at OPERATORS.| (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.js:9526:59) 
    at extend.constant (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.js:9956:14) 
    at Scope.$eval (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.js:11949:28) 
    at Object.watchExpression (<anonymous>:763:37) 
    at Scope.$digest (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.js:11794:40) 
    at Scope.$delegate.__proto__.$digest (<anonymous>:844:31) 
    at Scope.$apply (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.js:12055:24) 
    at Scope.$delegate.__proto__.$apply (<anonymous>:855:30) angular.js:9413 
(anonymous function) angular.js:9413 
(anonymous function) angular.js:6832 
Scope.$digest angular.js:11821 
$delegate.__proto__.$digest VM1409:844 
Scope.$apply angular.js:12055 
$delegate.__proto__.$apply VM1409:855 
done angular.js:7837 
completeRequest angular.js:8020 
xhr.onreadystatechange 

편집 : 무슨 일 수도

app.controller('mycontroller', function(MpttService, $scope, $modal, $log, $http) { 
    MpttService.getMptt(function(data){ 
     $scope.mpttdetails = data; 
     console.log(data); 
     }); 

:

이 내가 서비스에서 내 mpttdetails을 얻는 방법이다 ?

+0

mpttdetails가 항상 채워지지 않을 수도 있습니다. –

+0

mpttdetails를 설정할 컨트롤러 부분을 게시하십시오. – bekite

+0

안녕하세요, mpttdetails json을 추가했는데 서비스에서 가져 왔습니다. – Abhishek

답변

1

아마도 가장 큰 값은 mpttdetails입니다. 따라서 필터를 처음 호출 할 때는 undefined입니다.

필터 구현에 undefined에 대한 확인을 추가하십시오.

+0

배열 작업을 할 때 정의되지 않은 지옥을 사용하지 마십시오. 빈 배열과 벌금을 전달하십시오. 정의되지 않은 검사는 필요하지 않습니다. – bekite

+1

은'if (typeof arr === 'undefined')를 반환하고, 'undefined hell? 범위에 빈 배열을 정의하는 것을 잊어 버리면 그렇게 어렵지 않으므로 시간을 절약 할 수 있습니다. –

0

는 @bekite 오히려 $scope.mpttdetailsundefined 단순히 컨트롤러 내부에 대해 forEach는 빈리스트가 아닌 정의되지 않은 변수를 볼 수 있습니다이 방법을 $scope.mpttdetails = []를 넣어 경우 확인보다, 언급 한 바와 같이.

관련 문제