在angularJs中可以观察全局变量吗?
我从遗留代码中设置了一个window.test变量,然后我需要观察该变量以了解它是否存在。
我尝试过像
这样的东西$window.$watch("test" , function(n,o){
//some code here...
}
答案 0 :(得分:22)
有点。如果您包含Angular $window
service(如文档中所述,比直接访问window
更安全),您可以这样做:
app.controller('myCtrl', function ($scope,$window) {...}
然后使用监视功能作为$watch
的第一个参数,如下所示:
$scope.$watch(
function () {
return $window.test
}, function(n,o){
console.log("changed ",n);
}
);
但请注意,$watch
只有在触发Angular执行$ digest时才会执行。一种可能的方法是将遗留代码包装在$scope.$apply
中,或在遗留代码被遗漏后触发$digest
。这是一些很好的documentation on this。
基本上每当角度变化发生时(例如当jQuery导致变化时这是一个常见问题),就必须告诉Angular看看是否有变化。这是Angular保持合理表现的一种方式。