问题标签 [angularjs-digest]

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 回答
735 浏览

angularjs - 为什么我在 Promise 中需要一个 $scope.$digest

全部:

我对角度摘要很陌生,现在,当我使用 Promise 时,在其 then 函数中,我必须使用 $scope.$digest() 使范围变量更改在其他地方生效,例如:

这里我使用 Promise 来模拟 $http 请求,我的困惑在于 $scope.getdata,为什么我需要调用 $scope.$digest(),我认为 $scope.disable 应该由 angular 自动监视。

0 投票
1 回答
630 浏览

javascript - 过滤对象数组时的无限 $digest 循环

将参数传递给 $scope 上定义的过滤器时,遇到了无限的 $digest 循环。

在 HTML 中:

控制器:

筛选:

如果我像这样运行代码,我将得到 $digest 循环错误,但输出将被排序。如果我不使用 $scope.Field 和 $scope.Reverse 写入 myFilter:'published':true ,它将正常工作而不会出现错误。我已经检查了其他所有内容,禁用了所有可能干扰相同问题的指令和其他内容。

有人对此有什么好的意见吗?

0 投票
0 回答
319 浏览

angularjs - $scope.$apply 在 $scope.$on 之后

我正在使用此处概述的 $broadcast 模式让控制器收听他们的服务状态。

比如这里我监听服务的忙/闲状态来设置鼠标光标。

HTML

CSS:

这样做的问题是光标不会立即改变。它通常需要我移动鼠标,我想$digest在光标改变之前触发循环。

我可以用

但这会抛出:

错误。

处理这个问题的最佳方法是什么?

编辑:这是一个有效的 JSFiddle:http: //jsfiddle.net/HB7LU/23512/

这个问题似乎与使用非角度超时/异步方法有关。(即,如果使用 a 则不会出现问题$timeout,但如果使用setTimeout;则会出现问题

0 投票
2 回答
676 浏览

angularjs - AngularJS $http 不会触发摘要循环

我有角度摘要循环的问题。当我进行 http 调用并将响应放入 $scope 时,该 var 在下一个摘要循环之前不会在视图中更新。

例如,我将以下调用包装到视图上的函数和按钮中,该视图使用 ng-click 调用函数。第一次单击按钮时,视图上什么也没发生(发送了 http 响应并收到了响应)。第二次单击按钮后,视图将使用先前响应的数据更新,当前响应在下次单击后更新等...

ItemService.getData() 基本上是包装 $http 调用:

和 html

谢谢!

0 投票
0 回答
108 浏览

javascript - Angular ng-show 无法始终如一地工作

问题

我正在尝试将 Adob​​e Creative SDK 集成到我的 Angular 应用程序中。通过单击按钮从照片查看器模式初始化编辑器,这会触发以下功能。初始化编辑器后,onReady回调将隐藏照片查看器元素,并将编辑器附加到模态框。这部分效果很好。

在我的模态 DOM 中,我尝试使用我希望显示或隐藏的元素ng-show="editorOpen"ng-show="!editorOpen"具体取决于编辑器是否打开。我第一次触发$scope.editPhoto时,ng-show按预期工作。但是,当我关闭编辑器时,ng-show无法更新 DOM。编辑器消失,但隐藏的照片查看器元素仍然隐藏。

我不是 Angular 的摘要周期专家,但从我的研究中发现,我认为问题是在摘要周期中调用了hidePreview()and函数,导致没有将更改注册到.showPreview()ng-show$scope.editorOpen

一旦我关闭编辑器并且ng-show无法更新 DOM,我仍然可以通过在应用程序中执行另一个触发摘要循环的操作来手动触发它,例如使用左/右箭头键尝试导航到下一张照片查看器模式。

不过从这里开始变得更奇怪了。一旦我关闭了编辑器并手动触发了摘要,一切似乎都很正常。如果我第二次重新打开编辑器ng-show,即使我尝试使用刚才描述的方法手动触发摘要,也会完全停止工作。

我尝试过的解决方案

我尝试了许多可能的修复方法,包括本讨论中提供的解决问题的所有解决方案,但都失败了。

  1. 我尝试包装$scope.editorOpen = true$scope.editorOpen = false在一个$timeout函数中,因为这应该触发一个摘要。我尝试将延迟设置为 0 毫秒和 10 毫秒。两者都失败了。
  2. 我创建了一个作用域函数$scope.toggleEditor来切换$scope.editorOpen并将其传递到 Adob​​e Creative SDK 图像编辑器的onSaveonReadyonClose回调中,而不是下面代码中的showPreview()hidePreview()函数。那也失败了。
  3. 我尝试将我的整个$scope.editPhoto函数包装在一个$timeout函数中。也失败了。
  4. 我尝试了更直接的手动调用$scope.$apply()方法以及$scope.$digest()在我的showPreview()hidePreview()函数中。这通常在引发$rootScope:inprog错误之前只工作一次,而且闻起来像是不好的做法。
  5. 最后,变得更加绝望,我尝试if (!$scope.$$phase) $scope.$apply()了,只是想看看它是否能解决问题,尽管这是一种糟糕的做法。不出所料,它也像#4 一样失败了。

编码

在我的控制器中,我具有以下功能:

在我看来,我有以下 div,它存在于模式中:

0 投票
1 回答
80 浏览

javascript - AngularJS - $watch 没有按预期工作

这是我的 app.js

我想,3秒后,我会看到:

在我的控制台中。

相反,我只看到:

我在 index.html 中调用我的 init() 函数,如下所示:

为什么我看到这个输出?

0 投票
3 回答
592 浏览

javascript - 如何正确使用 AngularJS 摘要循环

我一直在研究 AngularJS Digest 循环的注意事项,我想更好地了解正确使用和不正确使用之间的区别。

例如,如果我有一个如下所示的 AngularJS 代码:

为什么setTimeout不被用作摘要循环的一部分,而被用作,$timeout我该如何解决这个问题?

请记住,我不仅在寻找代码解决方案,还在寻找为什么会发生这种情况的解释。尽管代码解决方案可能会出现,但它不会自行解释

0 投票
0 回答
91 浏览

angularjs - AngularJS:错误,即使设置为null,数组值也存在?

我有一个控制器,我在其中通过调用服务加载一些数据,并在成功回调时使用这些数据在 UI 上呈现它。

下面是服务代码

现在您可以在 srvDoc 函数中看到我正在创建一个新数组并存储 srvDoc.DocumentVersions 数组中的值。

成功回调在我的控制器内部,我得到了object detailedDocObj正确的结果。但是在我的控制台上我得到了错误

我也浏览了其他一些帖子,但无法弄清楚,数组中发生的问题和位置。即使我正在设置,我也在页面加载时调试代码null value in self.detailedDocObj,但我仍然能够查看DocumentVersion它在服务调用期间保存的数组值。

我在做什么错误,无法找出。任何帮助表示赞赏谢谢!!!

0 投票
1 回答
42 浏览

angularjs - 双向绑定更新哪些部分?

假设我在带有 SortBy 模型的控制器中有以下数组。

在视图中,我在两个地方使用了双向绑定,一个<select ng-model="SortBy">在一个表达式绑定中 <div>{{SortBy}}</div>

我绝对知道模型更新会更新表达式绑定部分,但它会重新更新中的选定选项<select>吗?

0 投票
1 回答
75 浏览

angularjs - ngOptions 使用新值成功刷新,但 ng-model 不是数据绑定

我有 2 个使用填充的选择表单ng-options,例如:

选择第一个下拉列表时,它将触发$http填充第二个下拉列表的调用,如下所示:

"brands"这会使用新值正确填充下拉列表。但是,当我去选择一个品牌时,它ng-model并没有改变。测试时,我收到一个空值。我已经考虑过$scope.$apply使用这个$digest循环,但这似乎不是我的问题("brands"下拉列表成功获取刷新的数据,它只是不发送数据)。

有谁知道发生了什么以及如何解决它?