问题标签 [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.
angular - angular 2 变化检测和 ChangeDetectionStrategy.OnPush
我试图理解ChangeDetectionStrategy.OnPush
机制。
我从读数中收集到的是,更改检测通过将旧值与新值进行比较来工作。如果对象引用未更改,则该比较将返回 false。
但是,似乎在某些情况下会绕过该“规则”。你能解释一下它是如何工作的吗?
javascript - 流星上的 ZoneAwarePromise 已被覆盖
在 Meteor 1.4.1.1 上,自从我更新到最新的 Angular 2.0.1 版本后,我一直在努力解决这个错误:Zone.js has detected that ZoneAwarePromise (window|global).Promise has been overwritten
我已经尝试过meteor update
,meteor reset
但错误仍然存在。
我一直在寻找一些答案,说我应该在每个其他脚本之后加载 Zone.js。问题是我无法控制 Meteor 上的加载顺序。
这是我的 package.json 依赖项:
这是我的流星包:
有任何想法吗 ?
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。
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-工地选择器
工作地点选择器的日志记录:
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。似乎更像是标准依赖而不是对等。
angular - 使用 Zone 修复 Angular2 CORS 重定向
我正在将我的应用程序与 REST API 连接,其中一些操作返回响应重定向。所以我得到了错误:“重定向表单 [url] 已被 CORS 策略阻止。请求需要预检,不允许遵循跨域重定向。”
是否可以创建一个新区域(除了角度区域和默认区域),捕获错误并手动执行请求?
或者……有什么好主意吗?服务器有时会返回重定向响应。
更新:
流动:
- 我请求网址/foo。
- CORS 向 /foo 发送一个 OPTIONS 请求
- 当第 2 步返回 ok 时,发送 GET 到 /foo
- 服务器返回一个重定向到 /bar
目前的流量是:
- 浏览器抛出异常
我想得到的流程:
- 用区域捕获异常
- 读取 url 以重定向并启动另一个 GET 请求到 /bar
我认为使用 Zone 可能会捕获浏览器异常。问题是如何?
我不确定我是否在角度区域之外启动了一个 http 请求,以及是否一切都会变得不稳定。你认为这可能吗?
angular - 如何防止 Firebase 在 Angular 2 中重复触发更改检测?
Firebase 使用大量内部异步调用来触发更改检测,因为 Angular/Zone 猴子修补 websocketsetInterval
等。即使我没有与我的应用程序交互,我也看到一连串的更改检测一直在发生,这有助于放慢速度,尤其是在移动设备上。
这种默认行为可能很有用,但是我现在使用 Firebase 的方式我可以非常严格地控制何时需要更新视图,因此 Firebase 的回调以这样一种方式使用,即无论如何都会手动进行更改检测。
我知道将更改检测器策略设置为OnPush
将对此有所帮助,我正在努力,但我想从各个角度进行攻击。
我熟悉区域,runOutsideAngular
但现在不确定是否在此处应用它,因为所有异步调用都发生在 Firebase 模块中。
如何让 Firebase 在 Angular 区域之外开展所有业务?
编辑:显示问题的示例代码:
angular - 使用 Angular2 在 NgZone 中执行 http 请求
我想知道如何在 Angular2 区域内更新配置文件视图时执行 http 请求。在我的顶级配置文件组件中,我目前正在使用以下方法执行一个简单的 http 请求authHttp
:
问题在于,由于此请求是异步的,因此在满足此请求并更新配置文件之前加载配置文件页面。发生的情况是我第一次单击刷新时没有任何反应,因为旧数据加载到配置文件中,而新数据加载后。然后我第二次点击刷新一切正常,因为它只是使用从最后一个请求加载的新数据。
这个问题可以使用解决NgZone
吗?我可以以某种方式将此请求包含到区域中,以便在完成后重新评估组件树吗?
javascript - 使用外部脚本时如何绕过 Angular 2 中的 zone.js?
我有一个带有 ngUpgrade 的 Angular 1 应用程序。应用程序拉入一个外部脚本文件(第 3 方服务的库),该文件通过 setTimeout 轮询服务器。
现在,该应用程序运行良好,除非我想用 Protractor 对其进行测试,否则它无法做到这一点,因为:
ScriptTimeoutError:异步脚本超时:30 秒内未收到结果
有没有办法告诉 Angular 2 在 angulars 上下文之外运行脚本标签的内容?