Angular Не может прочитать свойство null

0

В веб-приложении у меня есть две ячейки, содержащие некоторые элементы. У меня также есть фильтр с фильтрами (составленный выбором). Вначале все фильтры выбраны, и он работает. Но когда я пытаюсь использовать комбинацию, которая ничего не находит в первом списке, но есть некоторые данные во втором списке, я получил ошибку. Это когда я вызываю Сервис в контроллере:

if(data){ // If i have some response form serve

 var tmp = null;
 var lastName = null;

 angular.forEach(data.people, function(ppl){
 if(ppl.lastName != lastName){
    if (lastName != null){
        $scope.people.push(tmp);
    }
    // Clean the tmp
    tmp = {
           name : null,
           count : 0,
           products : []
     };
     // Update lastName
     lastName = ppl.lastName;
  }
   // Add the actual row in the ob
   tmp.name = lastName;
   tmp.count += ppl.personCount;
   tmp.products.push(ppl);
  });

  // Process lasts elements (if there are some) in the array
  if(tmp.products.length > 0){
    $scope.people.push(tmp);
  }

Ошибка: Cannot read property 'products' of null

Я попытался написать: var tmp = []; вместо null, но он говорит: " Cannot read property 'products' of undefined

  • 1
    Используйте if (tmp && tmp.products && tmp.products.length > 0) для последней проверки
Теги:
undefined
service

1 ответ

0
Лучший ответ

Я думаю, что angular.forEach это дает вам обзор проблемы. Вместо этого попробуйте использовать код ниже.

if(data && data.people.length > 0){ // If i have some response form serve

 var tmp = {};
 var lastName = null;

 for(var i = 0; i < data.people.length; i++){
     if(ppl.lastName != lastName){
         if (lastName != null){
             $scope.people.push(tmp);
         }
         // Clean the tmp
         tmp = {
            name : null,
            count : 0,
            products : []
         };
         // Update lastName
         lastName = ppl.lastName;
     }
     // Add the actual row in the ob
     tmp.name = lastName;
     tmp.count += ppl.personCount;
     tmp.products.push(ppl);
  };

  // Process lasts elements (if there are some) in the array
  if (tmp && tmp.products && tmp.products.length > 0)
      $scope.people.push(tmp);
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню