问题标签 [angularjs-watch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
175 浏览

angularjs - angularjs:知道这个错误是什么意思吗?

嗨,我收到此错误:

https://docs.angularjs.org/error/ $rootScope/infdig?p0=10&p1=%5B%5B%22fn:%20parentValueWatch;%20newVal:%201;%20oldVal:%20undefined%22,%22inputValue;%20newVal :%201;%20oldVal:%20undefined%22%5D,%5B%22fn:%20parentValueWatch;%20newVal:%20undefined;%20oldVal:%201%22,%22inputValue;%20newVal:%20undefined;%20oldVal:%201 %22%5D,%5B%22fn:%20parentValueWatch;%20newVal:%201;%20oldVal:%20undefined%22,%22inputValue;%20newVal:%201;%20oldVal:%20undefined%22%5D,%5B%22fn :%20parentValueWatch;%20newVal:%20undefined;%20oldVal:%201%22,%22inputValue;%20newVal:%20undefined;%20oldVal:%201%22%5D,%5B%22fn:%20parentValueWatch;%20newVal:%201 ;%20oldVal:%20undefined%22,%22inputValue;%20newVal:%201;%20oldVal:%20undefined%22%5D%5D

错误:$rootScope:infdig 无限 $digest 循环

达到 10 次 $digest() 迭代。中止!在最后 5 次迭代中触发的观察者:[["fn: parentValueWatch; newVal: 1; oldVal: undefined","inputValue; newVal: 1; oldVal: undefined"],["fn: parentValueWatch; newVal: undefined; oldVal: 1 ","inputValue; newVal: undefined; oldVal: 1"],["fn: parentValueWatch; newVal: 1; oldVal: undefined","inputValue; newVal: 1; oldVal: undefined"],["fn: parentValueWatch; newVal : 未定义; oldVal: 1","inputValue; newVal: 未定义; oldVal: 1"],["fn: parentValueWatch; newVal: 1; oldVal: 未定义","inputValue; newVal: 1; oldVal: 未定义"]]

我很难认识到这个问题是哪个观察者或为什么突然抛出错误。昨天之前它工作正常。

任何帮助深表感谢。

0 投票
1 回答
58 浏览

javascript - $watch 没有被解雇

我正在使用来自ScrollSpy 的 AngularJS 实现的代码此处为原始文章),但在动态创建导航时遇到了问题,但在静态创建导航时它确实有效。

所以我有一个scrollSpy指令来监视spies. 该spies列表基本上是在用户滚动页面时应突出显示的导航元素的列表。 spies通过控制器addSpy中的方法添加,如下所示scrollSpy

addSpy函数总是被调用,但是当我动态添加间谍时,该列表的 $watch 永远不会被触发,当导航项被静态创建时它会被触发。

谁能帮我理解为什么 $watch 没有被解雇?我尝试添加$scope.$apply它,但它说它已经在消化周期内。

0 投票
1 回答
1119 浏览

javascript - Angular $watch 命令选择未定义的变量

我有一些 HTML 代码,我在其中使用 angular 来重复无线电输入。

我创建了一个 plunkr,展示了我现在拥有的功能。

http://plnkr.co/edit/n5OZVlbiwToHsuvGN3QI

重复代码绑定到我需要捕获到顶级范围的变量。($parent.selectedType 和 $parent.selectedSpecies)

代码在 HTML 文档中正确显示,但来自 ng-model 的数据绑定不起作用。

因此,我设置了一个 $scope.$watch 命令,如下所示:

观察 typeName 变量的变化,并在它发生变化时将 $scope.selectedType 设置为我刚刚在单选按钮中选择的内容。

但是,当我尝试运行此代码时,即使 $scope.$watch 部分紧跟在类型定义之后,我也会不断收到“类型未定义”。

为什么当我尝试 $watch 时类型未定义?

编辑:问题更深 - 它来自 $scope.type.selected.forEach() 不是一个被识别的函数的事实。forEach() 应该是一个函数,我错过了什么吗?

0 投票
1 回答
327 浏览

angularjs - 角度绑定是如何发生的?

以下是我对 angularJS 中绑定如何发生的理解。如果专家可以提供反馈/评论会很棒..

一旦 angularJS 遇到 {{myVar}}(和 {{anothervar}}),就会在内部创建一个观察者(针对每个变量)。这个观察者是为控制器'ctrlA'的$scope创建的。

每当在 $timeout、ng-click 等函数中调用函数时,它们都嵌入在 $scope.apply() 中。在你的函数被执行后(这可能会改变一些范围变量),$apply 将在 rootScope 上调用摘要。这将在整个应用程序中与 UI 同步变量!

当 $scope.digest 被调用时,它会遍历该范围的所有观察者。然后它获取变量的当前值并检查它是否已更改。如果它发生了变化,它会调用观察者处理程序(它会更改 html 以反映新值!)。

我在这里有个问题。angularJS 商店是否对每个范围都有某种键映射(或某种数据结构),其中包含对观察者的引用和该观察者的当前值?就像是:

0 投票
1 回答
374 浏览

javascript - 即使使用类似 $scope.user={pwd1:''},$watch 也不能在 Modal 中工作

请参考我的 Plunker 链接: http ://plnkr.co/edit/0vOjw0?p=preview

索引.html

注册.html

脚本.js

我面临的问题是在密码文本框中写入时,我的 $watch 不会在模态实例控制器中调用。但是当我在同一个简单的控制器中编写它时它会起作用,请帮帮我!

0 投票
3 回答
5849 浏览

javascript - 什么被认为是 Angular 中的观察者?

在 Angular 中什么被认为是“观察者”?观察者本身是观察者的唯一类型,还是其他 Angular 构造(如ngModel观察者)也是如此?

还是我错过了大局?例如,观察者是什么使指令喜欢ngModel工作?

更新:有没有办法判断何时存在观察者?在测试中我想知道什么时候调用 scope.$digest()

0 投票
0 回答
1713 浏览

javascript - angularjs scope.$watch 旧值始终与新值相同

简而言之- angularjs 控制器中的 $scope.$watch 总是让 newValue 和 oldValues 相同。

细节 :

我正在编写一个具有三个用例的 angularjs 应用程序:createProduct、updateProduct 和 searchProducts。我正在尝试为 createProduct 和 updateProduct 使用相同的控制器和部分控制器。如果用户导航到 '/createProduct' ,将执行创建产品的逻辑。如果用户单击搜索产品页面上的更新按钮,他应该会看到相同的视图,其中包含所选产品的详细信息。现在我只是想用虚拟产品数据来测试它。

为此,我创建了一个服务来将产品信息从 SearchProduct 控制器共享到 CreateProduct 控制器。

我正在使用 angular-ui-router 进行路由。以下是路线配置:

在 search-products.html 视图中,当用户单击更新按钮时,他应该被重定向到 create-product.html 视图,但更新特定的逻辑应该在 CreateProduct 控制器中执行:

在 CreateProductController 中,我在 ShareProductService.getProductCode 上使用手表来确定它是用于创建还是更新:

问题是,每次执行 watch 表达式时,newValue 和 oldValue 总是相同的。我可能以非最佳方式实现此场景,但我对手表的行为感到困惑。据我了解,每次设置 productCode 时 newValue 和 oldValue 都应该不同。我对手表工作原理的理解是否存在差距?另外,实现这种情况的更好方法是什么?

0 投票
1 回答
287 浏览

javascript - $scope.$watch 没有捕捉到指令修改的值

我的指令将焦点放在我的跨度上,并在我按下shifttab时分配布尔值,即 focusToSpan 为 true ,但是,此更改不会反映在我的控制器模板中。我什至用 $scope.$watch 对 focusToSpan 变量进行了检查,如下所示

指示

控制器

没有被调用。我是否知道对指令中的控制器变量所做的更改将如何反映在控制器和模板中。谢谢,巴拉吉。

0 投票
1 回答
811 浏览

angularjs - $watch not updating when service object is updated

I have discovered a perplexing circumstance in which the $scope.watch is not triggering as I would expect. I am hoping some of you AngularJS buffs out there can help shed some light on why Angular is behaving so peculiarly with $scope.watch and Service objects. As a note this was discovered while I was messing with the Ionic framework.

Below is an example of what I am running, and it works as expected (to be used to maintain state information during the session.)

TL;DR: Watch doesn't fire on the controller when I update currentUser with a new userObject (currentUser = new userObject();) in my service. It does fire if I instead update each individual attribute of the object.

I am seeking guidance on why so I can better understand.

Code

Service (Working)

Controller

View

Result

WAHOO! Loading is replaced on init with '' (null) and immediately after it is updated by the watch with 'Test User' (faster than the human eye unless debugging)

Breaking Scenario

The code above works great. However I wanted to try and reduce code by reducing repetition of effort by creating a new UserObject and then setting that object as 'Current User'. The change I made was as follows (view and controller were unchanged):

Service (Broken)

Result

Loading is replaced with '' on init (null) and $scope.watch never triggers in this scenario. My expectation is that the watch should be doing a deep watch on the object, and when I replace the object with a new one it should trigger that the object changed and trigger the watch.

The only thing I can figure, is that when I replace the currentUser object with a new object is that the delegates for $watch are also lost on that object. Does anyone have insight on how I can tell?

Phew.

0 投票
1 回答
586 浏览

angularjs - 如何获取有关谁更改了我在手表中设置的变量的信息(角度)

例子

$scope.$watch('data', function(){});

函数何时开始data变化,但如果我想知道是什么函数导致了变化。