Задать вопрос
coderisimo
@coderisimo

Почему не работает watch в angular.js?

имеется вот такой кусок кода :
$scope.edit_node = function (scope) { // когда приступаю к редактированию  подчиненного узла
                        $scope.singleData = scope.$modelValue; // добавляю редактируемый узел
                        $scope.singleData.parent_scope = scope.$parentNodeScope; // добавляю его родителя
                      };

// при любом изменении родителя хочу знать об этом
                    $scope.$watch('singleData.parent_scope', function (val) {
                        console.log('parent_scope updated!');
                    });

суть в том , что когда я изменяю одного из потомков родителя $watch не реагирует. Вопрос : почему? ведь потомки это часть родителя и когда их изменяю - опосредовано изменяется и родитель.

спасибо
  • Вопрос задан
  • 403 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@bromzh
Drugs-driven development
Попробуй добавить 3-й параметр со значением true в вызов $watch.

UPD
Может просто рассылать уведомления при изменении? В функции edit_node сделать $scope.$emit / $scope.$broadcast (смотря куда по иерархии нужно их отсылать).
Ответ написан
coderisimo
@coderisimo Автор вопроса, куратор тега JavaScript
Конечно пробовал!
Там вложенность большая (куча объектов , которые ссылаются на другие объекты) выскакивает ошибка.
в конце концов стал следить не за всем singleData.parent_scope , а за singleData.parent_scope.$childNodesScope.$modelValue.length' . вроде работает )
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
если вы меняете данные в коде - просто в месте изменения уведомите что вы что-то поменяли. Если меняете через UI - есть ng-changed. deep watch это мегакастыль который уменьшает контроль и увеличивает вероятность проблем в будущем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы