TyperError: Невозможно прочитать свойство 'length' из неопределенного - PullRequest
0 голосов
/ 28 февраля 2020

Наша команда использует angularjs для разработки виджета ServiceNow, и мы видим "TyperError: Невозможно прочитать свойство 'length' undefined" в нашей консоли:

enter image description here

Когда мы нажимаем «at eval», он приводит нас к конкретному фрагменту кода с выделенной строкой 321:

enter image description here

Мы не можем понять, что является причиной этой ошибки. Мы используем $ watch для массива ($ scope.data.list) и прочитали, что $ watchCollection может быть лучше, но мы попробовали это без изменений. Есть идеи, что может быть причиной этой ошибки и как от нее избавиться?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Насколько мне известно, $watch на $scope.data.list вызывается всякий раз, когда любое значение изменяется в этой коллекции

Так что, глядя на ошибку, кажется, что $scope.data.list list in больше не выходит в $scope.data , Попытайтесь выяснить, где $scope.data изменится.

И используйте приведенный ниже синтаксис для просмотра коллекции

$scope.$watchCollection('names', function(newList,oldList) {
   if(newList && newList.length) {
      $scope.data.list = newList.length;
   }
});
0 голосов
/ 28 февраля 2020

Из кода, который вы опубликовали, вы не определили или не объявили $scope.data.list (я предполагаю, что $scope.data где-то определено). Чтобы решить эту проблему, вы должны хотя бы объявить свой $scope.data.list первым, чтобы следить за ним.

Приступая к части $watch, все зависит от ваших требований. $scope.$watchCollection ищет изменения, сделанные в массиве, а также элементы, тогда как $scope.$watch будет искать изменения, сделанные, если массив полностью назначен другому. В противном случае, если вы хотите посмотреть глубже, вы можете использовать $scope.$watch с логической переменной true, передаваемой в качестве третьего аргумента.

См. Эту ссылку для полной документации - https://www.sitepoint.com/mastering-watch-angularjs/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...