问题标签 [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.

0 投票
0 回答
288 浏览

javascript - Zone.js runGuarded 如何使用 Angular4 在幕后工作

我正在将 Zone.js 与一个项目一起使用来处理异步功能,我正在阅读源代码以及它们之间的关系,但对于了解所有功能(如 runGuarded)如何帮助我处理异步内容仍然是新的,之前使用过 Zone.js 的任何人单独帮助该项目,我有兴趣了解更多关于所有内容的信息,特别是 runGuarded 在区域中的工作方式,如果有人可以解释,这里是源代码的片段:

0 投票
1 回答
1422 浏览

javascript - Angular 4 + zonejs:未捕获错误后路由停止工作

如果在路由期间来自组件(构造函数或 ngOnInit)的未捕获错误,则导航将不再起作用。

即使 RouterModule 有一个全局 ErrorHandler 和一个 ErrorHandler 也会发生这种情况,添加了一个 ZoneListener 以确保为好 - 请参阅 app.module.ts

这里的最小示例: https ://embed.plnkr.co/L19S3hKWyqgKUIT1EJlI/preview

确保打开控制台。单击“示例组件”后,由于 ExampleFormComponent 中的强制错误,会出现一些堆栈跟踪。之后,您将无法导航回“主页”。

如何处理意外的、未捕获的错误以确保它们不会破坏整个应用程序?

0 投票
1 回答
22739 浏览

javascript - Angular 项目中控制台上的 zone.js 违规警告仅在 Chrome 上

我有一个使用 创建的 Angular 4 项目@angular/cli,在开发模式下运行应用程序时,我在控制台中收到这些警告:

奇怪的是,警告只出现在 Chrome 上。(我的 chrome 构建版本是58.0.3029.110:)

  1. 这些(违规)警告是什么意思?
  2. 这对应用程序性能有害吗?
  3. 如何禁用/覆盖或配置 zone.js 以删除这些警告?
0 投票
1 回答
610 浏览

angular - Ionic iOS 承诺永远不会解决

我正在使用 Firbase 在我的 Ionic 3 应用程序中实现 Google 登录。我已经成功地能够使用本机 Google Plus Cordova 插件,然后使用Angular Fire 2使用凭据登录 Firebase 。这是我的代码:

在我的登录页面中调用它:

但是,当我使用 Xcode 部署到 iOS 时,我可以看到控制台输出:

承诺永远不会解决!我曾尝试手动使用 ZoneJS 但未成功:

但结果是一样的。有关信息,登录在浏览器中工作正常。

0 投票
0 回答
511 浏览

angular - NgZone 是如何解决这个问题的?

我正在创建一个应用程序,用户可以通过他的 Google 帐户来识别自己。在幕后,我使用 gapi 来处理登录。另一方面,有一个称为“用户”的角度服务,Observable每次用户的状态(在线/离线)发生变化时,它都会向订阅者广播信息。然后,将所有内容粘合在一起,有一个按钮,当用户单击它时,会发生以下情况:

  • 一旦 gapi 被初始化,就会创建一个 Promise 来解决。(下面代码的第一行)
  • 当 promise 解决时,Google 登录是通过 gapi 执行的。(下面代码的第二行)
  • 当登录承诺解决时,向后端发出 AJAX 请求 id 以验证 Google 令牌并返回电子邮件、姓名等信息并订阅此 observable。this.restService(下面代码中以开头的行)
  • 当上面的 observable 发出我的 web 服务返回的值时,我在我的“用户”服务中调用一个函数,该函数在 observable 上发出一个值以表示用户的状态(它广播了用户现在已通过身份验证的事实)。
  • 然后,所有订阅者都会收到此信息并知道用户已登录。

这是代码:

问题是代码有时有效,有时无效。经过一番调查,我注意到这与我的 Web 服务执行的持续时间有关。为了确保这一点,我在其中做了一个语句,在 2 秒内暂停请求的执行,在这种情况下,我的代码总是失败。但我所说的“失败”是什么意思?

在页面的某处,我有一个订阅用户服务可观察的组件:

当 Web 服务执行得非常快时,我会看到console.log,然后canPostComment属性会更新,我的视图也会更新,所以没有问题。但是,当 Web 服务需要更长的时间时,我仍然看到console.log具有正确值但视图没有更新......

怀疑它与 Angular 更改检测有关,我以这种方式使用 zone:

然后它起作用了......所以我读到了 zone 并且我了解到它被用来警告 angular 它必须运行更改检测(或类似的东西......),但我也读到了常见的函数,如setTimeout或 AJAX 调用已经被“区域”修补了,所以我不明白它是如何解决我的问题的,我也不明白为什么我会遇到这个问题。为什么 Angular 没有看到这种canPostComment变化?

由于我的代码有点复杂,因此很难破解它,这就是我复制/粘贴大部分相关代码的原因。

编辑

在我提出问题后,我不得不修改一些代码,因为我需要知道整个登录过程何时完成。事实上,当用户点击登录按钮时,它的标题变成了“正在登录...”,一旦整个过程完成,它就会消失。我本可以订阅userService.getStatusobservable,但我决定承诺能够做到:

所以我以这种方式更新了上面的代码:

出于好奇,我试图删除该this.zoneService.run声明只是为了看看会发生什么,结果证明它没有......所以把所有东西都放在一个承诺中似乎可以解决这个问题......但是,问题仍然存在......为什么第一个例子没有用吗?

0 投票
8 回答
4975 浏览

angular - 无法在字符串“__zone_symbol__optimizedZoneEventTask”上创建属性“__creationTrace__”

这是一个糟糕的星期四。这是13号。昨天我向我的同事解释了我们在星期四而不是星期五的 13 日摔倒是多么幸运。

嗯,那是昨天的事,今天醒来,我的脸是 angular 的拳头:

无法在字符串“__zone_symbol__optimizedZoneEventTask”上创建属性“ creationTrace

好吧,它也可能是 zone.js,或者甚至可能是更深的那个叫做开发堆栈的黑暗深渊。有谁能够帮我?

对不起我的态度,只是因为它的早期 alpha 阶段使用 Angular 最终对我造成了影响。

PS:我只想说,自从昨天的工作版本以来我没有改变任何东西。所以我完全不知道为什么以及如何以及从哪里来这个错误......

0 投票
1 回答
114 浏览

android - [Angular 2]Fabric js 和 Zone js 不能一起正常工作

我有一个 Angular 2 项目,因此使用 zone.js,其中用户可以在修改后的画布(由 FabricJS 提供)上编辑/绘制图片。

直到最近,我将 zone.js 保留在 0.8.5 版本,因为我主要没有时间升级它并测试每个应用程序的功能是否兼容。我最终将它升级(最高 0.8.12)以修复 IE 上另一个组件的意外行为。

这就是我的问题:对于 zone js > 0.8.5,当通过 Cordova 在 android 设备上运行应用程序时,偶尔会发出事件(即使有些事件丢失),但大多数情况下它们根本不会被触发。

一个明显的例子是“移动”事件:只要我们不释放手指压力就应该发出,它会不时触发一次,但不会连续触发。另一个是“mouseup”,升级后不再触发。

我已经尝试在区域之外执行我的 eventListener 代码,但遗憾的是,我似乎需要坚持在其中才能修改组件状态和属性。

我希望有人能找到解决方案,或者至少找到一条可以遵循的轨道。谢谢。

0 投票
2 回答
1938 浏览

angularjs - Safari 中混合 AngularJS 和 Angular 应用程序的性能缓慢

我最近开始使用升级模块将 AngularJS 应用程序迁移到 Angular 4。

我的 AngularJS 指令之一使用第三方库 ( ngFlow ) 来使用XMLHttpRequest.send(). 在混合模式下运行时,上传在 Chrome 和 Firefox 中都可以正常工作。但是,在 Safari 中,应用程序在上传过程中变得非常缓慢,并且浏览器进程达到了 100% 的 CPU 使用率。

使用 Safari 网络工具,我看到有很多globalZoneAwareCallback来自 zone.js的调用。

我的印象是,Angular 区域正在为XMLHttpRequest上传期间发生的每个进度事件启动更改检测。

我知道我可以使用runOutsideAngularfromNgZone来避免这种情况,但我不知道如何在第三方 AngularJS 库中发生异步调用的情况下使用它,或者如果有任何其他解决方案来解决这个问题。

0 投票
0 回答
473 浏览

node.js - 你如何在 NodeJs 中使用 ZoneJs?

我正在尝试使用 Express 在我的 NodeJs api 中设置一个区域。我有以下要求...

以及以下中间件功能...

我通过

当我在我的 api 中调用任何端点时,我得到“无法读取未定义的属性 'fork'”。Zone 对象没有任何悬而未决的东西,当然不是当前属性。

谁能指出我在 NodeJs api 中使用 ZoneJs 的一个工作的、非常简单的例子?我想为每个请求创建一个区域,并在该区域中设置一些变量,并在我的一些控制器操作中将它们拉出来,比如当前经过身份验证的用户。我想像请求上下文一样使用它。

更新

我已经改变了要求

现在我有一个 Zone.current。我不完全了解属性。如果我在我的护照中间件中设置 Zone.current.currentUser,我可以将其拉回其他地方,但我无法访问上面列出的“属性”属性。我在 Zone.current 上没有看到它。另外,如果我将 setupAuthZone 函数更改为

稍后我查看 Zone.current.id 时看不到 id 属性。它根本不存在。我可以看到我设置的一些属性,而我看不到其他属性。

0 投票
5 回答
8064 浏览

angular - 如何仅在需要时加载 Zone.js

我正在创建一个可以动态注入正在运行的网站的 Angular 2 应用程序。这个应用程序的重点是能够直观地修改网站内容。

当有问题的网站也没有使用 Angular 2 运行时,一切都按预期工作。特别是,当原始网站使用 Angular 2 和 Zone.js 时,我的应用程序也尝试加载 Zone.js,但它在error: Zone already loaded. 我使用 Webpack 作为构建系统,我试图通过将构建分成 3 个部分来解决这个问题:manifestpolyfillapp. Manifest 只包含 Webpack 清单,polyfill 包含core-jsand zone.js,其余的在app. 还有第四个块叫做index. 这是放置在网站中的内容,它首先检查是否window.Zone已定义。如果是,则仅添加manifestapp。否则也polyfill

问题是当polyfill块没有加载时,该块中的所有模块都从 Webpack 中丢失。因此,当代码从需要或(我认为正在发生的事情)import的块中到达一些时,我会收到此错误:appcore-jsZone.js

清单文件中的某处:

问题

如何将 Webpack 或 Angular 配置为不zone.js作为依赖项导入,而是使用已在窗口上注册的依赖项?我希望能够有条件地加载core-js,并且zone.js仅当它尚未加载到网站上时。

更新

我修改了我的构建(Webpack),只使用一个包。在那个包中,我尝试使用 Webpack 的动态导入,如下所示:

我正在使用 Typescript,这需要定义文件。问题是这Zone.js是一个环境依赖,所以当我像这样使用它时,我收到一个关于缺少定义文件的错误。我该如何解决这个问题?