一尘不染

AngularJs监视窗口变量

angularjs

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

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

我尝试过类似的东西

$window.$watch("test" , function(n,o){
    //some code here...
}

阅读 235

收藏
2020-07-04

共1个答案

一尘不染

有些。您可以包含Angular $window服务(如文档所述,比window直接访问更安全):

app.controller('myCtrl', function ($scope,$window) {...}

然后使用watch函数作为您的第一个参数,$watch如下所示:

$scope.$watch(
    function () {
        return $window.test 
    }, function(n,o){
        console.log("changed ",n);
    }
);

演示小提琴

但是请注意,只有在$watch触发Angular进行$
digest操作后,才会执行。一种可行的方法是将遗留代码包装为$scope.$apply$digest在遗留代码被提取后触发一次。这是有关此的一些很好的文档

基本上,只要更改发生在angular之外(例如,当jQuery导致更改时这是一个常见问题),就必须告诉Angular看看是否发生了更改。这是Angular保持合理性能的一种方式。

2020-07-04