当前位置: 首页 > 面试题库 >

AngularJs监视窗口变量

芮岳
2023-03-14
问题内容

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

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

我尝试过类似的东西

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

问题答案:

有些。您可以包含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保持合理性能的一种方式。



 类似资料:
  • 我有一个服务,说: 我想使用foo来控制以HTML呈现的列表: 以便控制器检测何时维修。foo更新了,我拼凑了这个模式,将服务添加到控制器的

  • 问题内容: 我正在写指令,并且需要注意父作用域的更改。不知道我是否正在按照首选方式执行此操作,但是它不能与以下代码一起使用: 它记录了窗口加载,但是即使更改了overlaytype,也不会再次登录。 我怎样看待变化? 编辑:这是整个指令。不确定我为什么要使用儿童镜 问题答案: 您应该在子作用域上具有 data 属性,作用域在父作用域和子作用域之间使用原型继承。 同样, $ watch 方法期望的第

  • 问题内容: 我想在AngularJS服务中监听窗口事件,以便可以将它们广播到我的控制器。 我有一个Chrome扩展程序,可以使用发送任何消息。 我希望我的angularjs服务侦听该消息并将其发送到使用 在我的服务内部,我正在尝试通过以下侦听器这样做。 我也尝试过,但是我不知道为什么上面的代码不起作用。同样是我的IDE,jetbrains webstorms将上述代码片段归类为不可访问。 在此之前

  • 问题内容: 我已经开始了angularjs项目,我想实现fancybox。 为此,我在解决方案中包含了jQuery和fancybox插件。我试图在下面的fancybox窗口中显示的代码中打开模板。 视图 控制者 还有 popup / add.html Fancybox成功打开了一个包含模板的窗口,但是该表达式尚未求值。谁能帮忙吗? 问题答案: 我已经为fancybox创建了指令

  • 问题内容: 我尝试创建一个指令,当输入字段标记为无效时,该指令应执行一些操作。对于此示例,假设我有一条指令检查输入是否为素数,并且我想创建一条指令,在无效时将一个类添加到元素: validate-prime使用ng-model上的解析器和格式化程序来更新模型的有效性。 现在,我希望invalid-add-class指令在模型无效时添加“错误”类,并在有效时将其删除。换句话说,它应该监视模型控制器的

  • 问题内容: 我有一个Java应用程序,它通过hibernate使用MySQL数据库。数据库实际上是用作持久层:在程序的初始加载时读取数据库,然后将记录保存在内存中。 但是,我们增加了额外的复杂性,其中另一个进程也可能会更改数据库,并且更改可以反映在Java应用程序上将非常好。但是,我并不特别喜欢每隔几秒钟就查询数据库的拉动机制,尤其是很少更新数据库。 有没有一种方法可以使回调监听数据库的变化?触发