Позвольте мне начать с того, что то, что я пытаюсь сделать, вероятно, не считается хорошей практикой. Тем не менее, мне нужно сделать что-то подобное, чтобы переносить большое веб-приложение в AngularJs небольшими шагами.
Я пробовал делать
$scope.$watch(function () { return myVar; }, function (n, old) {
alert(n + ' ' + old);
});
Где myVar - глобальная переменная (определенная в окне)
И затем сменив myVar с консоли. Но он срабатывает только при первой настройке наблюдателя.
Он работает, если я обновляю myVar из контроллера (см. http://jsfiddle.net/rasmusvhansen/vsDXz/3/, но не если он обновлен из некоторого устаревшего javascript
Есть ли способ достичь этого?
Обновление Мне нравится ответ Андерса, если устаревший код полностью отключен. Однако на данный момент я рассматриваю такой подход, который, кажется, работает и не включает таймер, срабатывающий каждую секунду:
// In legacy code when changing stuff
$('.angular-component').each(function () {
$(this).scope().$broadcast('changed');
});
// In angular
$scope.$on('changed', function () {
$scope.reactToChange();
});
Я награждаю Андерса точки, хотя я пойду с другим решением, так как его решение правильно решает указанную проблему.