2016-07-28 59 views
0

我對AngularJS比較陌生,而且我收到了一個我不完全明白的錯誤。在這段代碼中,我得到一個類型錯誤(下面列出)。這個錯誤指向了與用戶數組sprint.users一致的行。在angular.forEach上獲取TypeError

$scope.countThisUserSprintsCompleted = function (user) { 
    var thisUserTotalSprintsCompleted = 0; 
    angular.forEach($scope.sprints, function(sprint) { 
     angular.forEach(sprint.users, function (sprintUser, index) { 

      if(sprintUser.username == user.username && sprint.status == 'complete') { 
       thisUserTotalSprintsCompleted++; 
      } 
     }); 
    }); 
    return thisUserTotalSprintsCompleted; 
}; 



angular.js:13642 TypeError: Cannot read property 'users' of undefined 
at userController.js:2123 
at Object.q [as forEach] (angular.js:336) 
at m.$scope.countThisUserSprintsCompleted (userController.js:2122) 
at fn (eval at compile (angular.js:14539), <anonymous>:4:357) 
at m.$digest (angular.js:17211) 
at angular.js:17417 
at e (angular.js:5912) 
at angular.js:6191 
+2

這意味着,在提供的代碼中,「sprint」是未定義的。 –

+0

沒有那麼快@guys起來,看看上面的行 – Damiano

+0

@Damiano你可以把任何你想要的作爲參數,並不意味着他們將被定義時調用。 –

回答

0

這意味着,隨着代碼提供,sprint是未定義的。

由於您應該在angular.forEach回調中獲得sprint,因此$scope.sprints內的值可能是undefined

舉個例子:

[1, undefined, 2].forEach(function(value){ 
 
    console.log(value); 
 
});

爲了解決這個問題(更多的是補丁的),你可以使用sprint之前增加一個檢查:

[{ test: "value" }, undefined, { test: "other value" }].forEach(function(value){ 
 
    if (value) console.log(value.test); 
 
});

如果您不希望undefined此值,您應該在進入forEach之前調查$scope.sprints並嘗試解決那裏的問題。

+0

我使用console.log()進行了檢查,沒有空值。我使用的是firebase數據,我認爲我的問題是我在創建$ scope.sprints之前,它正在從firebase DB讀取數據。 – tvandezande

+0

感謝您的幫助,但回到調試幫助我找到它。 – tvandezande

+0

@tvandezande感謝SO上的人的最佳方式是讚揚! –

相關問題