-2

Моего AngularJS код услуги -Почему AngularJS меняет значения объектов?

this.getEducation = function (id) { 
      var url = 'SOME_URL/?party_id=' + id; 
      var deferred = $q.defer(); 

      $http.get(url). 
       success(function (data, status, headers, config) { 
        console.log(data); 
        deferred.resolve(data); 
       }). 
       error(function (data, status, headers, config) { 
        console.log("could not get education info"); 
        deferred.reject(data); 
       }); 
      return deferred.promise; 
     } 

Теперь моя служба возвращает данные, как это -

[ 
    { 
    "id": 22, 
    "party_id": 9, 
    ... 
    "university": "UoP", 
    "created_at": "2015-07-13 17:09:52", 
    "degree": "BE" 
    }, 
    { 
    "id": 23, 
    "party_id": 9, 
    ... 
    "university": "UoP", 
    "created_at": "2015-07-13 17:11:06", 
    "degree": "ME" 
    } 
] 

Теперь вот проблема - когда data разрешается в обещании, содержит следующий массив -

[ 
     { 
     "id": 22, 
     "party_id": 9, 
     ... 
     "university": "UoP", 
     "created_at": "2015-07-13 17:09:52", 
     "degree": "BE" 
     }, 
     { 
     "id": 23, 
     "party_id": 9, 
     ... 
     "university": null, 
     "created_at": "2015-07-13 17:11:06", 
     "degree": null 
     } 
    ] 

Итак, мой вопрос: WHY AngularJS устанавливает некоторые значения элементов массива в null?

P.S. Я использую данные, полученные этим контроллером, назначая его переменной области видимости и выполняя ng-repeat в формах.

Edit: Мой контроллер код выглядит следующим образом

$scope.educationInformations = []; 
$scope.setEducation = function() { 
      EducationProvider.getEducation(id).then(
       function (educations) { 

        angular.forEach(educations, function(education){ 
         console.log(education); 
        $scope.educationInformations.push({education:education}); 
         console.log($scope.educationInformations); 
        }) 
      }); 
     }; 

ЭТО работает (журнал консоли является точным)

Теперь это мой код шаблона. Когда это используется,

<div ng-repeat="educationInfo in educationInformations"> 
<input-text ng-model="educationInfo.education.university"></input-text> 
</div> 

Теперь input-text директива создана мной .. Директива код -

.directive('inputText', function() { 
     return { 
      templateUrl: 'views/inputText.html', 
      restrict: 'E', 
      scope: { 
       ngModel: '=' 
      } 
     }; 
    }); 

шаблон Директива

<input class="form-control" 
ng-model="ngModel" ng-init="ngModel = null"> 
+7

У меня с трудом верится, что угловая причина этого. Требуется дополнительная отладка. –

+0

Вы просматривали данные, возвращаемые с вашего запроса '$ http.get', проверяя фактический ответ? У этого есть 'null'? –

+0

- это то, что ожидает подтверждения данных или просто то, что вы предполагаете? –

ответ

0

Редактировать директивы код шаблона следующим образом

<input class="form-control" 
ng-model="ngModel" ng-init="ngModel"> 

Ваш код установил ng-model в null (ng-init = "ngModel = null), так как у вас есть двусторонняя привязка к контроллеру, эта инициализация до нуля повлияет на объекты области контроллера.

Смежные вопросы