AngularJs监视窗口变量

时间:2013-12-18 19:43:48

标签: angularjs

在angularJs中可以观察全局变量吗?

我从遗留代码中设置了一个window.test变量,然后我需要观察该变量以了解它是否存在。

我尝试过像

这样的东西
$window.$watch("test" , function(n,o){
    //some code here...
}

1 个答案:

答案 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);
    }
);

demo fiddle

但请注意,$watch只有在触发Angular执行$ digest时才会执行。一种可能的方法是将遗留代码包装在$scope.$apply中,或在遗留代码被遗漏后触发$digest。这是一些很好的documentation on this

基本上每当角度变化发生时(例如当jQuery导致变化时这是一个常见问题),就必须告诉Angular看看是否有变化。这是Angular保持合理表现的一种方式。