问题标签 [ngzone]

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 投票
0 回答
356 浏览

angular - Angular 5.2.0:无法读取 ngZone.run 中未定义的属性

我对 Angular 完全陌生,所以我希望我能清楚地描述我的问题。我正在尝试从可观察对象中获取日期属性以将其显示在前端的 KendoUI 日期时间选择器中。

这是我的源代码:我有一个ResultObject具有 2 个属性的对象(id, myCustomDate)id属性是 type ,属性numbermyCustomDatetype Date

我通过 REST API 请求获取数据。这是电话:

这是我遇到的主要问题,我试图从对象结果中分配属性日期:

例外说dnullor undefined

正如我所说,我对 Angular 完全陌生,我什至不知道这样的用法ngZone是否正确。因此,如果我能得到任何帮助,那就太好了。

0 投票
2 回答
1296 浏览

angular - Angular 2:从promise调用函数时视图不更新

我的角度很基本。我有一个显示对象(在服务中)的视图:

我的服务的简单版本如下所示:

如果我创建一个按钮来调用该服务,一切正常并且视图更新:

在视图组件中使用服务调用:

但是,如果我通过对话窗口调用承诺,那么它不会更新视图:

组件(简化):

我已经尝试过 ngZone 和 ChangeDetectionStrategy.Default。两种解决方案都不适合我。我可以看到对象两次都发生了变化,并且控制台日志也有效。但是视图没有更新。


我的@Componment 没有任何有趣的东西。对于全班来说,它是:

对于我的添加组对话框,它是:


编辑:很难将整个东西提取到 plunker 中,但我尝试重新创建它并证明承诺的东西有效。我认为问题可能出在 MatDialog 上。它不会更新主视图。我尝试在 plunker 中重新创建整个东西,但我无法在 plunker 中使用有角度的材料。似乎网络上的所有其他示例也都被破坏了:

https://embed.plnkr.co/LTAEwV6bNvoGQAFoky60/

0 投票
1 回答
608 浏览

angular - Angular 6 更新后 this._zone.onMicrotaskEmpty undefined

将应用程序更新到 Angular 6 后,我在测试执行期间遇到错误

它说,那

是未定义的。

我的测试执行一些在角度之外运行的代码

有人知道如何解决这个问题吗?

0 投票
3 回答
45965 浏览

angular - 何时使用 Ngzone.run()?

我在我的角度项目中遇到了一个错误,最终通过将我的代码包装到

this answer所述。

我之前的理解zone是,Angular 无法检测到callbacks第三方库的异步所做的更改,因为“它们不在 Angular 中zone”。如果我单击 a button,则触发的事件不是浏览器的本机click事件,而是由 angular 创建的自定义(修补)click事件,其handlerzoneso angular 中运行会知道其回调处理程序所做的更改。

但是我无法理解通过router.navigate()在第三方回调中运行会产生这个问题(如this github issue所示)。不是Routerangularservice本身吗?zone为什么在第三方调用时它不会自动通知 Angular callback

我通过router.navigate在 NGXS 的 state reducer 中使用遇到了这个问题。

我的问题是:

有人能解释一下我什么时候需要把我的代码包装进去NgZone吗?

调试几个小时并意识到我的代码脱离了zone上下文是令人厌烦的。

0 投票
2 回答
6634 浏览

angular - NullInjectorError:没有 NgZone 的提供者!(Angular 6 库)

概括

我创建了一个 Angular 6 库,但是当我尝试在创建它的项目之外使用它时出现错误。这看起来像很多代码,但它主要是由 CLI 生成的样板文件。

最小工作测试用例

我使用 Angular 6 CLI 创建了一个非常基本的库。

然后我可以添加 <lib-example></lib-example>src/app/app.component.html运行ng serve并查看示例组件按预期工作。

接下来,我进行编辑projects/example/src/lib/example.component.ts以将 an 添加*ng-if="true"<p>标签中。

为了获得ngIf指令,我 import BrowserModule,所以我projects/example/src/lib/example.module.ts看起来像这样:

重建:

我的组件还没有做任何有用的事情,但只要我在我用来创建它的同一个项目中使用它,它就可以工作。

最小的非工作测试用例

让我们尝试在不同的应用程序中使用该库。我首先生成一个新应用程序,该应用程序与包含该库的应用程序位于同一目录中。

然后我在 中添加<lib-example></lib-example>myapp/src/app/app.component.html导入库myapp/src/app/app.module.ts,使其看起来像这样。

错误信息

当我浏览到该应用程序时,我在控制台中收到以下错误。

我究竟做错了什么?

0 投票
0 回答
67 浏览

angular - 在 Angular 4 中订阅 Web 套接字后无法使用来自套接字的消息更新 UI 元素

我正在编写 Angular 4 编码。我有一个 Web 套接字,我可以使用 console.log() 记录来自 Web 套接字的消息,但是当我使用该消息更新变量时,同样不会反映在 UI 上。请在下面找到代码。

我认为这是 zone 的问题,所以我将上面注释的 ngzone 代码放在两行中,但随后它给了我无法读取未定义错误的属性“运行”。请帮忙

0 投票
2 回答
1802 浏览

angular - 最佳从 EventEmitter 事件重新进入 ngZone

有一个组件封装了一些库。为了避免所有这个库的事件监听器的变化检测噩梦,库的范围在角度区域之外:

这一切都很清楚和普遍。现在让我们添加事件以发出动作:

问题是这个发射器不会触发变化检测,因为它是在区域外触发的。那么可能的是重新进入该区域:

最后,我来回答这个问题。this.ngZone.run即使我没有在父组件中监听此事件,这也会强制进行更改检测:

这是不想要的,因为,好吧,我没有订阅那个事件=>没有什么可检测的。

有什么办法可以解决这个问题?

对于那些对现实生活中的例子感兴趣的人来说,问题的根源就在这里

0 投票
1 回答
524 浏览

javascript - NgZone 不再有效

我的 NgZone 似乎不再工作了。我正在使用 Ionic、Angular 和 Firebase 构建一个应用程序。

它产生一个错误:

未处理的承诺拒绝:缺少命令错误;区域:; 任务:Promise.then;值:缺少命令错误未定义

我已经在我的项目中使用了几个月,完全没有问题,我在很多地方使用它,但突然之间它不再起作用了。

我通常导入它:

在构造函数中

然后像这样引用它:

但它不再起作用了......

package.json调用以下依赖项:

"zone.js": "0.8.18"

任何想法这可能意味着什么或我应该做什么?谢谢!

0 投票
0 回答
207 浏览

javascript - DOM 视图未更新,角度不在区域中

我有一个与区域相关的问题,我无法让它工作。我是 Angular 的新手,但对 JavaScript 有一些基本的了解。

那么问题是什么,我无法更新视图。

我为离子 BLE 使用第三方库,并在提供程序中使用它

提供者/通信控制器.ts

调用 set_ble_tolisten() 来订阅 promise。当接收到数据时,会调用 handlereceiveddata()。

为了传输数据 ble_communication_controller() 被调用,这个函数接受一个回调,它被存储。当ble设备响应时,调用handlereceivedata()。然后调用存储在 ble_communication_controller() 调用中的回调

我创建了一个页面,配置,这个包含一个 ts 一个 html 和 scss 文件

配置.ts

加载页面时,调用 ionViewDidEnter ,问题是从提供程序调用 update_state_gui 。数据在此函数中接收。isInAngularZone,告诉我这是错误的,超出区域。relay_1_toggle 和 relay_2_toggle 是 html 中的切换按钮。

并且 get 没有更新,我尝试了 ngzone.run 或超时和 markForCheck()。但它不起作用。

谢谢你的帮助

0 投票
1 回答
516 浏览

angular - UI 未针对 ngZone Angular 之外的事件进行更新

在我的项目中,我通过 Google Contact API 获取电子邮件。我的问题是在获取电子邮件后,角度 UI 没有更新。

这是我在 ContactComponent.ts 中获取电子邮件的代码

我正在使用服务订阅事件以添加电子邮件

这是我的contact.component.html

联系人列表组件的代码

联系人列表组件.html

在来自谷歌联系人 API 的其余调用之后,我在联系人列表组件中获取数据。但是总结一下我的用户界面没有更新。列表未更新。谷歌搜索后,我了解到 Angular 对 ngZone 之外的事件的行为有所不同。收到数据后如何更新 UI。