TyperError: Cannot read property 'length' of undefined

TyperError: Cannot read property 'length' of undefined

我们的团队正在使用 angularjs 开发 ServiceNow 小部件,我们在控制台中看到 "TyperError: Cannot read property 'length' of undefined":

当我们点击 "at eval" 时,它会将我们带到这段突出显示第 321 行的特定代码片段:

我们似乎无法找出导致该错误的原因。我们在数组 ($scope.data.list) 上使用 $watch 并且读到 $watchCollection 可能更好,但我们没有改变地尝试过。有什么想法可能导致此错误以及如何消除它吗?

根据您发布的代码,您尚未定义或声明 $scope.data.list(我假设 $scope.data 在某处定义)。到 解决这个问题,你至少需要先声明你的 $scope.data.list 来监视它。

来到$watch部分,这取决于你的要求是什么。 $scope.$watchCollection 查找数组和元素中所做的更改,而, $scope.$watch 将仅在数组完全为空时查找所做的更改 分配给不同的。不然想看深的话可以 使用 $scope.$watch 和作为第三个传递的布尔值 true 变量 对它的争论。

请参阅此 link 以获取完整文档 - https://www.sitepoint.com/mastering-watch-angularjs/

据我所知 $watch$scope.data.list 上每当此集合中的任何值更改时调用

因此,通过查看错误,$scope.data.list list 似乎不再存在于 $scope.data 中。尝试找出 $scope.data 将要更改的位置。

并使用以下语法监视集合

$scope.$watchCollection('names', function(newList,oldList) {
   if(newList && newList.length) {
      $scope.data.list = newList.length;
   }
});