Функция ng-change запускается при загрузке страницы до загрузки данных?

Одна из моих функций контроллера запускается до загрузки моих данных.

HTML:

<div ng-show="item.name">
    <input ng-change="doChange()" ng-model="item.name">
</div>

Мой контроллер:

$scope.item = { name: 'bob' };
$scope.other = {};

$scope.doChange = function() {
    $scope.item = $scope.other['test'].name
}

// load the data now!
MyService.getData().success(function(newdata) {
    $scope.item = newdata.item;
    $scope.other = newdata.other;
});

Мой сервис:

app.factory("MyService", function($http) {
    return {
        getData: function() {
            return $http.get("/data");
        }
    }
});

Это приводит к

TypeError: Cannot read property 'name' of undefined

потому что doChange() выполняется до того, как служба загрузит данные. Я не уверен, почему это происходит. Разве doChange не должен запускаться только при изменении ввода, но при этом он запускается при загрузке страницы.


person rublex    schedule 14.05.2015    source источник


Ответы (2)


Изменять

$scope.doChange() {
  $scope.item = $scope.other['test'].name
}

to

$scope.doChange = function() {
  $scope.item = $scope.other['test'].name
}
person kwangsa    schedule 14.05.2015

Извините, оказывается, в другом месте кода я изменил item.name, поэтому он запускался при загрузке страницы.

Я думал, что ng-model каким-то образом запускает ng-change на <input>, но я просто был глуп.

person rublex    schedule 14.05.2015