问题标签 [zonejs]
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.
javascript - 承诺数组和 Promise.all()
我有这样的承诺数组:
我想执行它们并像这样捕获它们的错误
这很好,但我现在想在另一个承诺的 then() 中这样做:
只要我直接在 Promise.all() 中编写数组,这个的工作也很好,但是如果我想使用promiseArray
之前的定义,例如:
然后,catch()
按预期运行,但我在控制台中有错误
但是我想使用最后一个解决方案,因为我的数组是根据某些条件通过将 Promises 推送给它来生成的。(第一个例子工作得很好,我不明白有什么不同)
将 catch 添加到我的每个承诺中,同时将它们添加到数组中可以解决我的问题,但我想找到一个更好的解决方案。
我真的很感激一些帮助。
PS:如果它改变了某些东西,我正在使用带有 zone.js 的 angular2
angular - angular2 理解 VM 轮回和事件
我刚刚开始研究 Angular2 变更检测机制。
我已经阅读了有关该主题的 Thoughram 的博客文章(关于 ZoneJS 和 Angular2 区域的文章),但仍然有 1 个术语我找不到任何定义。
这是这篇文章的摘录:
NgZone 基本上是一个分叉的区域,它扩展了它的 API 并在它的执行上下文中添加了一些额外的功能。它添加到 API 中的一件事是我们可以订阅以下一组自定义事件,因为它们是可观察的流:
onTurnStart() - 在 Angular 的事件轮转开始之前通知订阅者。每个由 Angular 处理的浏览器任务发出一次事件。
onTurnDone() - 在 Angular 的区域完成处理当前轮次以及从该轮次安排的任何微任务后立即通知订阅者。
onEventDone() - 在结束 VM 事件之前的最终 onTurnDone() 回调之后立即通知订阅者。用于测试以验证应用程序状态
我了解区域的概念并且可以分叉,我唯一的问题是VM turn
and VM event
,我找不到任何定义。
这些 VM 事件和转折是什么?它们是 ZoneJS、Angular 还是浏览器的一部分?
谢谢,阿维。
javascript - Zone.js 中的自定义错误处理程序
我一直在使用 Zone.js,我想为任何未捕获的异常设置日志记录。我可以设置一个错误处理程序,如下所示:
但是如果在 Promise 中抛出异常,这将不起作用。Zone 错误处理程序的好处是它与 Promises 挂钩并触发其中的异常,但除了覆盖一堆之外,我找不到在创建 Zone 后实际覆盖或添加错误处理程序的方法区域上的私有字段。
是否有一个实际的区域 API 可用于更新错误处理程序,或者我是否必须更改构建根区域的 polyfill 或覆盖私有字段或类似的东西?
angular - Zone.assertZonePatched 不是函数
我收到错误消息:
未处理的承诺拒绝:Zone.assertZonePatched 不是函数
虽然我在 index.html 中正确导入了 zonejs:
这是代码:
Plnkr:http ://plnkr.co/edit/zZYOcgxcRINx23JhuxOk?p=preview
这里有什么问题?
javascript - Angular2 无法更新到 RC7 - zone.js & reflect-metadata
我试图让我的应用程序使用新的 RC7 角度运行,但我似乎无法完成它,因为控制台喊道:
当它以某种方式消失时,会弹出:
看起来实现发生了变化,尽管我npm install
从头开始编辑所有内容,但我的并没有更新,更新我package.json
的如下:
index.html:(我也试过参考 unpkg.com的包,没有成功)
知道如何解决这个问题吗?
提前致谢!:)
node.js - 在节点中使用 zone.js 钩子
我正在尝试在节点中使用angular/zone.js编写一个简单的演示,但由于某种原因,beforeTask
orafterTask
都没有被调用。
这是我正在运行的代码:
现在在区域内一切都打印正常,包括区域名称,但没有调用任何钩子。
我是否缺少 zone.js + node.js 的基本内容?
(运行节点 v5.0.0,zone.js 0.6.23)
angular - Angular2 最终版本 - “错误:Angular 需要 Zone.js prolyfill”
我已经从 RC4 升级到了 Angular2 的最终版本。当我运行npm start
时,应用程序卡在“正在加载...”上,我得到的唯一错误是关于 Zone.js:
基本上,typeof Zone
未定义:
这是我的 package.json:
我已经尝试过 zone.js ^0.6.23 以及这些软件包版本。有任何想法吗?我可以编辑和添加更多信息。
编辑:我在 CHANGELOG 中发现的唯一线索是来自 RC 6:
测试配置:由于 zone.js 对等依赖升级,加载各种区域规范的顺序发生了变化。请参阅此示例 Karma 配置。
编辑:我尝试在脚本标签中导入 Zone.js,index.html
即使我在 node_modules 中有包,我也会收到这些错误:
angular - Angular 2单击事件回调而不触发更改检测
我在尝试(click)
在 Angular 2 中的事件回调函数中执行一些逻辑而不触发更改检测时遇到了很大的麻烦。
为什么我不想触发变更检测
回调函数执行简单的动画滚动到顶部。它不会影响其他组件,因此我不需要在每个组件中触发更改检测,事实上我真的不希望它触发!因为更改检测确实会在每个组件中触发,所以动画在移动设备上的性能非常差。
我试过的
我知道我可以使用在区域外运行代码
当您想在区域外运行的代码没有被click
, keyup
,keydown
事件等调用时,这很有效。
因为我的组件看起来像......
<button (click)="doThing()">Do that thing outside the zone!</button>
...myFunction
将在区域外运行,但该click
事件将触发更改检测。
我已经OnPush
在尽可能多的组件中实施了变更检测策略。
此处未触发更改检测很重要,但我找不到阻止它的方法。
编辑
请参阅此plnk ,并将所有组件中的更改检测设置为OnPush
。单击子行组件按钮会触发子行、行和应用程序组件中的 CD。
angular - 当 Angular2 完成更新 UI 时执行 JavaScript
我试图找出在 Angular 完成更新 UI 后调用 Javascript 的最佳方法。
我的问题源于 KendoUI 需要 display:block 才能正确渲染。但是,Angular 2 对 this.toggleGridView 的更改尚未呈现在页面上,这导致 jQuery("#schools-grid").height() 无法正常工作。
HTML 模板:
Angular 2点击处理程序:
我目前的解决方法是使用 setTimeout,但这似乎很不合时宜。
注意 - 我们不能将 Kendo 用于 Angular 2,因为不使用 Beta 版本是一项政策。
谢谢!