问题标签 [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.
angular - Angular 5.2.0:无法读取 ngZone.run 中未定义的属性
我对 Angular 完全陌生,所以我希望我能清楚地描述我的问题。我正在尝试从可观察对象中获取日期属性以将其显示在前端的 KendoUI 日期时间选择器中。
这是我的源代码:我有一个ResultObject
具有 2 个属性的对象(id, myCustomDate)
。id
属性是 type ,属性number
是myCustomDate
type Date
。
我通过 REST API 请求获取数据。这是电话:
这是我遇到的主要问题,我试图从对象结果中分配属性日期:
例外说d
是null
or undefined
。
正如我所说,我对 Angular 完全陌生,我什至不知道这样的用法ngZone
是否正确。因此,如果我能得到任何帮助,那就太好了。
angular - Angular 2:从promise调用函数时视图不更新
我的角度很基本。我有一个显示对象(在服务中)的视图:
我的服务的简单版本如下所示:
如果我创建一个按钮来调用该服务,一切正常并且视图更新:
在视图组件中使用服务调用:
但是,如果我通过对话窗口调用承诺,那么它不会更新视图:
组件(简化):
我已经尝试过 ngZone 和 ChangeDetectionStrategy.Default。两种解决方案都不适合我。我可以看到对象两次都发生了变化,并且控制台日志也有效。但是视图没有更新。
我的@Componment 没有任何有趣的东西。对于全班来说,它是:
对于我的添加组对话框,它是:
编辑:很难将整个东西提取到 plunker 中,但我尝试重新创建它并证明承诺的东西有效。我认为问题可能出在 MatDialog 上。它不会更新主视图。我尝试在 plunker 中重新创建整个东西,但我无法在 plunker 中使用有角度的材料。似乎网络上的所有其他示例也都被破坏了:
angular - Angular 6 更新后 this._zone.onMicrotaskEmpty undefined
将应用程序更新到 Angular 6 后,我在测试执行期间遇到错误
它说,那
是未定义的。
我的测试执行一些在角度之外运行的代码
有人知道如何解决这个问题吗?
angular - 何时使用 Ngzone.run()?
我在我的角度项目中遇到了一个错误,最终通过将我的代码包装到
如this answer所述。
我之前的理解zone
是,Angular 无法检测到callbacks
第三方库的异步所做的更改,因为“它们不在 Angular 中zone
”。如果我单击 a button
,则触发的事件不是浏览器的本机click
事件,而是由 angular 创建的自定义(修补)click
事件,其handler
在zone
so angular 中运行会知道其回调处理程序所做的更改。
但是我无法理解通过router.navigate()
在第三方回调中运行会产生这个问题(如this github issue所示)。不是Router
angularservice
本身吗?zone
为什么在第三方调用时它不会自动通知 Angular callback
?
我通过router.navigate
在 NGXS 的 state reducer 中使用遇到了这个问题。
我的问题是:
有人能解释一下我什么时候需要把我的代码包装进去NgZone
吗?
调试几个小时并意识到我的代码脱离了zone
上下文是令人厌烦的。
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
,使其看起来像这样。
错误信息
当我浏览到该应用程序时,我在控制台中收到以下错误。
我究竟做错了什么?
angular - 在 Angular 4 中订阅 Web 套接字后无法使用来自套接字的消息更新 UI 元素
我正在编写 Angular 4 编码。我有一个 Web 套接字,我可以使用 console.log() 记录来自 Web 套接字的消息,但是当我使用该消息更新变量时,同样不会反映在 UI 上。请在下面找到代码。
我认为这是 zone 的问题,所以我将上面注释的 ngzone 代码放在两行中,但随后它给了我无法读取未定义错误的属性“运行”。请帮忙
angular - 最佳从 EventEmitter 事件重新进入 ngZone
有一个组件封装了一些库。为了避免所有这个库的事件监听器的变化检测噩梦,库的范围在角度区域之外:
这一切都很清楚和普遍。现在让我们添加事件以发出动作:
问题是这个发射器不会触发变化检测,因为它是在区域外触发的。那么可能的是重新进入该区域:
最后,我来回答这个问题。this.ngZone.run
即使我没有在父组件中监听此事件,这也会强制进行更改检测:
这是不想要的,因为,好吧,我没有订阅那个事件=>没有什么可检测的。
有什么办法可以解决这个问题?
对于那些对现实生活中的例子感兴趣的人来说,问题的根源就在这里。
javascript - NgZone 不再有效
我的 NgZone 似乎不再工作了。我正在使用 Ionic、Angular 和 Firebase 构建一个应用程序。
它产生一个错误:
未处理的承诺拒绝:缺少命令错误;区域:; 任务:Promise.then;值:缺少命令错误未定义
我已经在我的项目中使用了几个月,完全没有问题,我在很多地方使用它,但突然之间它不再起作用了。
我通常导入它:
在构造函数中
然后像这样引用它:
但它不再起作用了......
我package.json
调用以下依赖项:
"zone.js": "0.8.18"
任何想法这可能意味着什么或我应该做什么?谢谢!
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()。但它不起作用。
谢谢你的帮助
angular - UI 未针对 ngZone Angular 之外的事件进行更新
在我的项目中,我通过 Google Contact API 获取电子邮件。我的问题是在获取电子邮件后,角度 UI 没有更新。
这是我在 ContactComponent.ts 中获取电子邮件的代码
我正在使用服务订阅事件以添加电子邮件
这是我的contact.component.html
联系人列表组件的代码
联系人列表组件.html
在来自谷歌联系人 API 的其余调用之后,我在联系人列表组件中获取数据。但是总结一下我的用户界面没有更新。列表未更新。谷歌搜索后,我了解到 Angular 对 ngZone 之外的事件的行为有所不同。收到数据后如何更新 UI。