2013-07-22 6 views
1

Я использую angular.js, и я пытаюсь использовать $ watch для запуска функции при изменении моей переменной. Он запускается, когда данные изначально загружаются, но не после. Я точно не знаю, что здесь происходит?

Код наклеивается ниже:

function gradeChart($scope, $http) { 
    $http.get('studentData.json').success(function(data) { 
     $scope.students = data; 
    }); 

    $scope.$watch('students',function(change){ 
     console.log('this fires on load but not after'); 
    }); 
} 
+2

ли запрос был успешно выполнен? Попробуйте добавить функцию ошибки или выполнить запрос с использованием хром или firebug, чтобы убедиться, что запрос действительно был успешно выполнен. –

ответ

0

Это не ясно, что код работает «после» и обновления $scope.students.

Однако здесь две наиболее распространенные проблемы, связанные с обновлением $ области видимости массивов:

  1. Если вы переназначить $scope.students в новый массив, $ часы могут по-прежнему смотреть на предыдущий массив (ссылка) , Попробуйте использовать angular.copy() в вашем «после того, как» код:
    angular.copy(data, $scope.students);

  2. При изменении одного из элементов массива, вы должны будете использовать либо $watchCollection (если он доступен в версии угловому вы используя) или проверить объект равенства вместо ссылки (обратите внимание на 3-й параметр):
    $scope.$watch('students',function(change){...}, true);

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