Позвольте мне начать с того, что то, что я пытаюсь сделать, вероятно, не считается хорошей практикой. Однако мне нужно сделать что-то подобное, чтобы переносить большое веб-приложение в AngularJs небольшими шагами.Угловая: Можно ли просмотреть глобальную переменную (I.e вне области видимости)?
Я пытался делать
$scope.$watch(function() { return myVar; }, function (n, old) {
alert(n + ' ' + old);
});
Где MYVAR является глобальной переменной (определяется в окне)
, а затем изменить MYVAR из консоли. Но он срабатывает только при первой настройке наблюдателя.
Это работает, если я обновлю MYVAR внутри контроллера (см http://jsfiddle.net/rasmusvhansen/vsDXz/3/, но если она обновляется из некоторого наследия Javascript
Есть ли способ для достижения этой цели?
Update Мне нравится Ответ Андерса, если устаревший код полностью отключен, однако в настоящий момент я рассматриваю такой подход, который, как представляется, работает и не включает таймер, срабатывающий каждую секунду:
// In legacy code when changing stuff
$('.angular-component').each(function() {
$(this).scope().$broadcast('changed');
});
// In angular
$scope.$on('changed', function() {
$scope.reactToChange();
});
Я награждаю очки Андерсу, хотя я пойду с другим решением, так как его решение правильно решает проблему.
вероятно не хотите использовать 'each' для трансляции так угловом только делает один digest – charlietfl
В вашем примере кода, на что указывает '.angular-component'? – mlhDev
В моем случае я выбрал элемент, который я действительно хотел изменить (с помощью 'angular.element (document.getElementById())', потому что я не использовал jQuery), а затем называл 'scope(). $ Broadcast ('customEventName'); '. Обратите внимание, что мне пришлось использовать '$ apply()' внутри функции '$ on ('customEventName')', чтобы вызвать вызов наблюдателей. –