Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJs监视窗口变量_Angularjs - Fatal编程技术网

AngularJs监视窗口变量

AngularJs监视窗口变量,angularjs,Angularjs,在angularJs中,是否可以观察全局变量 我从遗留代码中设置了一个window.test变量,然后我需要观察该变量以了解它是否存在 我试过类似的方法 $window.$watch("test" , function(n,o){ //some code here... } 有点。如果包含角度(如文档中所述,这比直接访问窗口更安全),则可以: 然后使用watch函数作为您的第一个参数,如下所示: 但是请注意,$watch将不会执行,直到有东西触发Angular来执行$digest。一

在angularJs中,是否可以观察全局变量

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

我试过类似的方法

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

有点。如果包含角度(如文档中所述,这比直接访问
窗口
更安全),则可以:

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

但是请注意,
$watch
将不会执行,直到有东西触发Angular来执行$digest。一种可能的方法是将遗留代码包装在
$scope.$apply
中,或者在遗留代码执行后触发
$digest
。这里有一些好东西


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

如果它在Angular的范围外更改,如在遗留代码中更改,这是否有效?更新了更多详细信息。另一个需要注意的是,只有当$window.test本身的值更改时才会触发此操作-或者是原语类型(数字、字符串、日期、布尔值等)更改值或对象引用更改。如果希望在$window.test的属性更改时触发它,则需要将
true
作为$watch()的第三个参数传递,以便angular将检查属性而不仅仅是相等。调用很好。在我的示例中,我使用了$rootScope。$watch()通过在JS控制台中运行“window.logging_required=true/false”,可以启用/禁用Angular应用程序的内置或生产实例的登录。非常有用。谢谢@KayakDave!
app.controller('myCtrl', function ($scope,$window) {...}
$scope.$watch(
    function () {
        return $window.test 
    }, function(n,o){
        console.log("changed ",n);
    }
);