问题标签 [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 回答
498 浏览

javascript - 如何从 AngularJS 应用程序中的控制器观察服务中的变量?

我正在编写应用程序功能,在请求执行时设置加载 gif(出于学习目的)。我使用 AngularJS 1.4.5、“Controller as”语法和 John Papa 风格指南。所以,我写了一个拦截器,将当前请求的数量传递给服务:

这是我的loading.service带有标志isLoadgerEnabled,指示我们是否需要显示加载图像:

上面的代码对我有用。在视图中,我有加载图像和ng-show 指令的div ,它从索引控制器侦听标志:

我的问题: vm.isLoaderEnabled没有使用服务更新(实际上 vm.isLoaderEnabled 总是错误的),我不确定问题出在哪里。我想为此功能编写高效而优雅的解决方案,也许没有 $scope (如果可能的话)。我已经准备好提出问题、重构建议或更好的想法来绑定数据以查看。

0 投票
0 回答
211 浏览

angularjs - $modal.open() 操作导致表单验证指令未更新

我有一个名为“show-errors”的角度指令,用于表单验证。这将在验证失败时将“has-error”css 类应用于包含 div。这在大多数情况下都非常有效,例如当用户离开输入框(模糊)或当用户单击继续按钮时(这是一个多步骤表单)。我通过广播“show-errors-check-validity”消息来触发所有表单元素的验证。

这是指令:

以下是它在 HTML 中的使用方式:

这一切都非常有效,直到我尝试使用承诺返回触发验证,特别是 $modal.open()。用户可以打开一个模式,允许他们选择先前保存的地址,该地址填充在表单上。当他们这样做时,我希望触发验证。我再次使用“show-errors-check-validity”消息。这会命中指令中的函数,但 angularjs 形式的 $error 值尚未更新。如果我调用 $rootScope.$digest() 我会收到一个错误,说明摘要正在进行中。在 angularjs $scope.shippingAddressForm.zip.$invalid 更新后,我将如何导致指令触发?

下面的 selectAddress() 函数位于包含 shippingAddressForm 和所有带有“show-errors”指令的表单元素的部分的控制器中。

0 投票
1 回答
80 浏览

javascript - Angular 表单验证中的奇怪行为

我正在使用 Angular 指令通过正则表达式验证表单。下面给出了代码和 HTML 的最小表示。

问题: 奇怪的行为如下:表单表示输入偶数长度的错误,但输入奇数长度的错误。击键示例:

一个 --> 有效

aa --> 无效

aaa --> 有效

aaaa --> 无效

键入和删除字母时都会发生这种情况。但是,如果我超过 aaaa 或任何偶数长度的字符串,它不会显示错误。我怀疑这可能是由于 Angular 摘要循环,但我无法弄清楚这个问题。

关于我可能想看的任何线索?

代码

这是我的指令:

在 HTML

0 投票
1 回答
1272 浏览

angularjs - AngularJs服务未注入控制器

我遇到了一些非常简单的问题,比如将基本服务注入控制器,尽管阅读了文档和其他 SO 问题,但我真的没有看到我正在犯的错误。

这是我的简化代码:

//控制器

//服务

//我的HTML

在过去的几个小时里,我尝试了很多事情,但不断得到

“TypeError:无法设置未定义的属性‘地点’”

似乎该服务在控制器内部不可用,我不知道它是否与路由有关,但我对此表示怀疑。

有人可以指出我正确的方向吗?

这是一个Plunker

0 投票
2 回答
42 浏览

javascript - 为什么在 $http 调用中获取的数据不总是显示/在它之外使用?

我有时非常非常随机地无法使用 $http 调用中收到的数据。这样接收到的数据将绑定到接收它的变量,但不会传输到另一个变量。例如,下面的 {{avariable}} 显示在 HTML 页面中(它不再为 null 并显示来自服务器的数据)但 {{anumber}} 不会从 0 更改为新数据(即使我做了 $scope .anumber = $scope.avariable)。有时这个问题是通过在 $http 调用本身而不是稍后分配相等性来解决的,但是这一次它也不是那样工作的。我想这与摘要,评估周期有关吗?我不一定能很好地理解它们或它们在这种情况下是如何工作的。不过,我确实在必要时使用了 $timeout。

一切都在 Rails/后端工作 - 我通过直接转到浏览器中的 URL 进行检查。当然,如前所述,{{avariable}} 确实从 null 更改为服务器数据。

AngularJS 代码:

我的 HTML 页面:

0 投票
1 回答
153 浏览

angularjs - 为什么 ng-click 需要这么长时间才能再次工作?

编辑:ng-dbclick 对我不起作用,否则将在此处使用。

原来的:

我有一个按钮。我单击它一次,它按预期工作。我再次点击它,它不起作用。我可能再等一分钟,然后它确实起作用了。我与按钮关联的函数确实有很多返回和调用其他函数的 if 循环,但问题是,它每次都可以完美地工作。在这里,我实现了一个双击功能(因此计数器是 1 和 2,它确实有效) - 双击时项目被标记为完成,否则单击它会根据其状态暂停或启动。

我知道我可能不了解这里的摘要或评估周期,或者可能需要使用 $scope.apply()...我基本上根本不了解这些概念或在哪里使用它们。我的嵌套函数中确实有 $http get 和 post 请求。

HTML 文件中的代码:

控制器文件中的代码:

0 投票
1 回答
4320 浏览

angularjs - 设置 urlRouteProvider.otherwise 时的 Angular ui-router 无限循环

我得到了这段代码的无限循环:

我也有这一套:

现在,当用户进入站点并且必须经过身份验证时,我得到了无限的摘要循环。它是这样的:

  1. 用户输入地址即:http://localhost
  2. 默认路由(否则)触发并将用户重定向到http://localhost/#/main
  3. $ OnStateChangeStart触发(对于app.main)并测试用户是否登录,如果没有,则阻止默认事件结束重定向到' app.login ';
  4. $ OnstateChangeStart触发(对于app.login)并测试 toState.name 是否为 app.login' 如果是,则无需重定向,因此返回。
  5. 我不知道为什么,但随后 $ OnStateChangeStart再次触发但app.main。结束它一遍又一遍。

请帮忙。

0 投票
2 回答
903 浏览

javascript - 在 $watch 中使用 $apply

我有一个非隔离范围指令。我不想隔离它,因为它需要在带有其他指令的元素上。然而,我需要在范围内观看一个项目。所以我尝试了这个:

这不起作用,因为 Angular 引发了一个摘要循环已经在进行中的错误。所以我的问题是,如何使用非隔离指令动态观察范围内的项目。

谢谢,

0 投票
1 回答
236 浏览

javascript - ng-show 没有从指令中捕获 $invalid 的更新值,为什么?

问题是:当我专注于一个字段并对其进行模糊处理时,它会向我显示输入字段周围的错误消息和边框颜色,然后我再次将其聚焦并写入 0 并对其进行模糊处理,它仍然向我显示输入红色边框但是不是错误消息。

该字段应该包含一个大于 1.00 的值,但是当我加载页面时默认值是 0.00,但是如果在模糊字段时触摸/聚焦该字段,应该会出现错误。

HTML:

它的指令是:

0 投票
0 回答
119 浏览

angularjs - 角度的消化周期是什么?

让我们在例如按下按钮时执行控件方法中的代码

在这种情况下,我们不会在屏幕上看到任何变化,因为摘要循环不会运行

但是如果我们写这个

我们会看到变化,因为当我们返回 promise 时,$Q 提供者决定运行摘要循环。 http://plnkr.co/edit/DqAzPBe37Qd9CU1ug8Pp?p=preview

你能解释一下为什么吗,我不明白这种行为的逻辑。如何防止这种情况?