问题标签 [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 投票
5 回答
32862 浏览

angular - angular 2 变化检测和 ChangeDetectionStrategy.OnPush

我试图理解ChangeDetectionStrategy.OnPush机制。

我从读数中收集到的是,更改检测通过将旧值与新值进行比较来工作。如果对象引用未更改,则该比较将返回 false。

但是,似乎在某些情况下会绕过该“规则”。你能解释一下它是如何工作的吗?

0 投票
2 回答
848 浏览

javascript - 流星上的 ZoneAwarePromise 已被覆盖

在 Meteor 1.4.1.1 上,自从我更新到最新的 Angular 2.0.1 版本后,我一直在努力解决这个错误:Zone.js has detected that ZoneAwarePromise (window|global).Promise has been overwritten

我已经尝试过meteor updatemeteor reset但错误仍然存​​在。

我一直在寻找一些答案,说我应该在每个其他脚本之后加载 Zone.js。问题是我无法控制 Meteor 上的加载顺序。

这是我的 package.json 依赖项:

这是我的流星包:

有任何想法吗 ?

0 投票
1 回答
205 浏览

angular - 绑定来自外部类的区域回调方法

语境

我正在开始一个学生项目,它是 angular2 的度量工具。

我实际上正在研究概念证明,证明我只能使用静态注册方法在运行时获取组件的指标,该方法myLibClass.registerComponents([Component1, Component2,...])将具有像这样的实现(伪代码):

问题

我怎样才能获得的全球区域angular2?我想在 ng2 zone 上绑定我的方法,以便能够检查每个调用的执行时间,而NgZone不提供执行此类操作的工具。

另一个从外部类度量组件的想法也是受欢迎的

更新:

我做了一些研究,发现如何使用 ̀ Zone.current` 获取全局 angular2 区域。

问题仍然存在,因为它的第二部分(最难的部分)尚未实现:

我想在 ng2 zone 上绑定我的方法,以便能够检查每个调用的执行时间,而NgZone不提供执行此类操作的工具。

做到这一点的唯一方法是分叉 angular2 区域并用我的分叉区域替换 angular 使用的实际区域(这是我看到的唯一方法)。

甚至可能吗?分叉区域不是问题,但我无法在 angular2 上连接它。

由于我需要的信息多于null(如您在ngZone 的源代码中所见,触发的每个事件都是用null),我需要有一个自定义区域供 angular2 使用,但我不能扩展 NgZone,因为它没有使用 DI 进行实例化,因此 angular2 使用的区域仍然是 NgZone。

0 投票
1 回答
410 浏览

angular - 在 SharePoint 2013 MasterPage 上使用 Angular2 会导致 Zone.JS 错误

我构建了一个小型 angular2 应用程序。我在自定义 sharepoint 2013 母版页上直接引用 appcomponent。它加载正确,但是当我打开共享点的设置菜单时, SharePoint 设置菜单 我在 zone.js 部分收到“堆栈空间不足”错误。

在 catch 块中,错误被捕获。在该错误之后,直接发生第二个错误:“在严格模式下不允许访问函数或参数对象的'调用者'属性”。

以下屏幕截图显示了 Firefox 控制台中的错误。每次通过将元素悬停在共享点设置菜单中都会发生: Firefox 中的 Zone.js 错误

任何建议都会很棒。感谢您的帮助,问候安东

0 投票
0 回答
674 浏览

angular - Angular 2 Observable 退出角区

Angular 2 应用程序,其中应用程序的大部分状态都存在于 @Injectable 服务中,这些服务通过 Observable 公开状态。在某些时候,应用程序会退出 Angular Zone,这会导致更改检测不起作用。在我的订阅中,我需要ChangeDetectorRef.detectChanges()在发生这种情况时打电话。如何确保应用程序不会退出 Angular Zone?或者确定是什么原因造成的?

这是我的服务:

这是使用此服务的组件的 ngOnInit 函数:

这是我们退出 Angular Zone 时显示的控制台输出。它似乎发生在 Calendar 过滤器发出它的第二个值时。

我已将其缩小到在我的组件树中深入几个级别的组件。当我在其构造函数中检查 Zone.current.name 时,它​​们位于root区域中而不是angular区域中。它们发出的任何事件都保留在root区域中,即使它们传播到父->服务->订阅者也是如此。

这是一个在角度区域中工作和运行的组件模板,但其子模板 sb-worksite-selector 在根区域中运行,如输出所示。

sb-工地选择器

工作地点选择器的日志记录:

0 投票
0 回答
345 浏览

angular - angular2 peer 对 zone.js 的依赖

我想我对npm 对等依赖项是什么以及我们为什么需要它们有合理的理解。一个常见的例子是 grunt 模块。如果你正在编写一个只兼容版本 x 的 grunt 模块,你必须确保任何使用你的 grunt 模块的人也使用版本 x 的 grunt。说得通。

但是, angular2 对zone.js有对等依赖。angular2 和 zone.js 之间的关系是什么,因此需要这种对等依赖项?为什么 zone.js 不能成为 angular2 的标准依赖?

在 grunt 示例中,您可以在没有相关模块的情况下很好地使用 grunt。但是,似乎不可能在没有 zonejs 的情况下使用 angular2。似乎更像是标准依赖而不是对等。

0 投票
0 回答
553 浏览

angular - 使用 Zone 修复 Angular2 CORS 重定向

我正在将我的应用程序与 REST API 连接,其中一些操作返回响应重定向。所以我得到了错误:“重定向表单 [url] 已被 CORS 策略阻止。请求需要预检,不允许遵循跨域重定向。”

是否可以创建一个新区域(除了角度区域和默认区域),捕获错误并手动执行请求?

或者……有什么好主意吗?服务器有时会返回重定向响应。

更新:

流动:

  1. 我请求网址/foo。
  2. CORS 向 /foo 发送一个 OPTIONS 请求
  3. 当第 2 步返回 ok 时,发送 GET 到 /foo
  4. 服务器返回一个重定向到 /bar

目前的流量是:

  1. 浏览器抛出异常

我想得到的流程:

  1. 用区域捕获异常
  2. 读取 url 以重定向并启动另一个 GET 请求到 /bar

我认为使用 Zone 可能会捕获浏览器异常。问题是如何?

我不确定我是否在角度区域之外启动了一个 http 请求,以及是否一切都会变得不稳定。你认为这可能吗?

0 投票
1 回答
594 浏览

angular - 如何防止 Firebase 在 Angular 2 中重复触发更改检测?

Firebase 使用大量内部异步调用来触发更改检测,因为 Angular/Zone 猴子修补 websocketsetInterval等。即使我没有与我的应用程序交互,我也看到一连串的更改检测一直在发生,这有助于放慢速度,尤其是在移动设备上。

这种默认行为可能很有用,但是我现在使用 Firebase 的方式我可以非常严格地控制何时需要更新视图,因此 Firebase 的回调以这样一种方式使用,即无论如何都会手动进行更改检测。

我知道将更改检测器策略设置为OnPush将对此有所帮助,我正在努力,但我想从各个角度进行攻击。

我熟悉区域,runOutsideAngular但现在不确定是否在此处应用它,因为所有异步调用都发生在 Firebase 模块中。

如何让 Firebase 在 Angular 区域之外开展所有业务?


编辑:显示问题的示例代码:

0 投票
1 回答
621 浏览

angular - 使用 Angular2 在 NgZone 中执行 http 请求

我想知道如何在 Angular2 区域内更新配置文件视图时执行 http 请求。在我的顶级配置文件组件中,我目前正在使用以下方法执行一个简单的 http 请求authHttp

问题在于,由于此请求是异步的,因此在满足此请求并更新配置文件之前加载配置文件页面。发生的情况是我第一次单击刷新时没有任何反应,因为旧数据加载到配置文件中,而新数据加载后。然后我第二次点击刷新一切正常,因为它只是使用从最后一个请求加载的新数据。

这个问题可以使用解决NgZone吗?我可以以某种方式将此请求包含到区域中,以便在完成后重新评估组件树吗?

0 投票
1 回答
428 浏览

javascript - 使用外部脚本时如何绕过 Angular 2 中的 zone.js?

我有一个带有 ngUpgrade 的 Angular 1 应用程序。应用程序拉入一个外部脚本文件(第 3 方服务的库),该文件通过 setTimeout 轮询服务器。

现在,该应用程序运行良好,除非我想用 Protractor 对其进行测试,否则它无法做到这一点,因为:

ScriptTimeoutError:异步脚本超时:30 秒内未收到结果

有没有办法告诉 Angular 2 在 angulars 上下文之外运行脚本标签的内容?