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

观看变量并进行更改

况繁
2023-03-14
问题内容

在AngularJS中,我有一个指令来监视作用域变量。当变量包含某些数据时,我需要对该变量进行一些更改。问题是,当我更改变量时,$watch将再次触发我。所以我最终陷入了持续的循环。

scope.$watch('someVar', function(newValue, oldValue) {
    console.log(newValue);
    scope.someVar = [Do something with someVar];
});

这会继续触发$watch,这很有意义。但是我确实需要一种更改监视变量的方法。有没有办法做到这一点?


问题答案:

当使用监视变量的变化时$scope.$watch,角度检查参考值是否已更改。如果具有,则$watch执行处理程序以更新视图。

如果您打算在$ watch处理程序中更改范围变量,它将触发一个无限的$ digest循环,因为范围变量引用在每次调用时都会更改。

解决无限摘要问题的技巧是使用 angular.copy
(docs)在处理程序中
保留
引用:$watch
__

scope.$watch('someVar', function(newValue, oldValue) {
    console.log(newValue);
    var someVar = [Do something with someVar];

    // angular copy will preserve the reference of $scope.someVar
    // so it will not trigger another digest 
    angular.copy(someVar, $scope.someVar);

});

注意:此技巧仅适用于对象引用。它不适用于原语。

通常,$watched在其自己的$watch侦听器中更新变量不是一个好主意。但是,有时这是不可避免的。



 类似资料:
  • 问题内容: 我想我的调用或当我指定一个文件被修改浏览器。修改文件后,我该如何“观看”该文件以执行某些操作? 以编程方式看来,这些步骤是..基本上每秒设置一个永无休止的间隔,并缓存初始修改日期,然后每当更改一次调用X时便比较该日期。 问题答案: 如前所述,您可以使用pyinotify: 例如: 这比轮询更有效。内核会告诉您何时进行操作,而无需您不断询问。

  • 问题内容: 如何同时查看几个变量(例如TreeSet)的内容?我可以观看一个TreeSet的内容,在“变量”窗口中单击它,但是我不知道如何对多个变量执行此操作。 问题答案: 您可以使用“表达式”窗口:在调试时,菜单窗口->“显示视图”->“表达式”,然后可以键入需要查看其内容的变量

  • 问题内容: 我有一个指令可以遍历链接元素的 children 。 但是,尚未将子级加载到DOM中,因为尚未解析其s表达式。 如何确定父指令知道它的DOM树已更改? 我可以使用,但是感觉不可靠。我也可以用代替,但这不能回答问题,也不是我所需要的。 问题答案: 所以这就是我最终要做的事情: 我发现您可以将函数传递给。从那里,很容易返回想要监视更改的表达式的值。它的工作原理就像在范围上传递属性的键字符串

  • 很抱歉,如果以前有人问过这个问题,但我非常不确定如何制定我的搜索以获得任何相关结果。 基本上,我有一个类“Wheel”,在该类中,我声明==操作符应该如何工作: 除非车轮的半径和转速与其他车轮相同,否则此操作有效,除非已切换。因此,换句话说,对于以下情况,它不会返回true: 2*PI*3*10 vs 2*PI*10*3 即使我把它打印出来,并且它们在控制台中是完全一样的(除非我的基本数学知识完全

  • 问题内容: 我有一个脚本,可以导出环境变量并启动一些下标。 可用于下标中的进程开头。如何更改环境变量? 我试图用设置变量,但是那不起作用。 问题答案: 通常,您只能在流程启动时影响流程的环境变量。如果您需要将更改传达给正在运行的流程,则环境不是正确的工具。 编辑该问题的目的是为了补充讨论中的问题:将偶尔更改的设置传达给正在运行的进程的一种相当不错的方法是指定一个配置文件,在该文件中设置LOGLEV

  • 我有一个这样的实体: 我有一个生成HQL的代码: 执行更新的代码: 问题: 乐观锁在这里出现吗?在上述情况下,Hibernate是否会自动处理乐观锁定(运行HQL且没有会话)? 如果上述情况不正确,我需要自己实现:我阅读了Hibernate文档,其中说,我需要用注释一个字段。但是我应该专门为此在表中添加这个新字段吗?或者我可以为注释指定任何现有字段?这里有什么特殊处理吗? 在乐观锁定期间抛出的异常