首先让我说我正在尝试做的事情可能不被认为是好的做法。但是,我需要做这样的事情,以便以小的增量步骤将大型 Web 应用程序迁移到 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();
});
即使我会采用另一种解决方案,我也会给安德斯加分,因为他的解决方案正确地解决了所述问题。