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

angularjs - 是否有任何替代 ngUpgrade 可以并行运行 angular 和 angularjs,或者选择退出 ngUpgrade 的 $digest 触发器的方法?

我有一个相当大的 angular.js 1.6 应用程序,我想迁移到 Angular,但是使用 ngUpgrade 会导致太多的 $digests 被触发(即每次Zone.onMicrotaskEmpty被触发)。不幸的是,我正在迁移的应用程序在性能方面已经不是太好了,所以每增加一个 $digest 都是一件大事。虽然我可以用 来缓解这种情况ngZone.runOutsideAngular(),但我真正想要的是完全禁用升级模块中 $digests 的自动触发,并在必要时手动触发它们;由于该应用程序由粗粒度组件组成,我将逐一迁移,因此几乎不需要更改 Angular 来触发 angular.js 中的 $digest。

以下是我正在考虑的一些可能的解决方案;他们中的任何一个是否比其他人更“标准”(或风险/错误倾向更小)?

  • 使用本地修改版本的 ngUpgrade 并调用已rootScope.$digest()删除
  • 在 iframe 中托管升级的 Angular 组件并postMessage()用于与应用程序交互
  • 在 Web 组件中托管升级的 Angular 组件(尚未研究在这种情况下通信将如何工作)
  • 从同一个文档中引导 angular.js 和 Angular 应用程序,让它们都在页面上处理自己的指令/组件

更新(8/23):现在我正在尝试选项 1(本地修改升级 js 文件);虽然我通常喜欢避免做这些事情,但这似乎是迄今为止最安全的选择。

0 投票
1 回答
464 浏览

javascript - 与 Zone.js 一起使用时,正文事件 StopPropagation() 不起作用

总的来说,我正在做的是我有一个日期选择器,点击会冒泡到正文,我还有一个 ag-grid,它有一个列菜单,用于侦听正文的点击并关闭菜单。请参阅 plunkr,只需单击 DOB 旁边的汉堡包并转到过滤器,然后单击日期选择器并选择一个日期。注意菜单没有关闭。它保持打开状态是因为在 app.component 中添加了事件侦听器,该事件侦听器会在事件到达主体后阻止事件传播到网格。一切都按照我的理解工作。

https://plnkr.co/edit/QDUVOUEHJYMNSumVFICc?p=preview

我遇到的问题是我的应用程序中完全相同的设置不起作用。事件处理程序以正确的顺序被调用,但由于某种原因,即使在使用相同的处理程序取消事件后,在我的应用程序中,网格仍然会获取事件并关闭菜单。我在这里寻找的是一些可能导致我所看到的行为的想法。显然我会设置一个 plunkr 来演示,但我不能,因为它似乎可以工作三个,我可以上传我的整个应用程序。

0 投票
1 回答
2769 浏览

angular - 未捕获的 RangeError:仅在生产中超出最大调用堆栈大小

8 月 28 日更新:下面的包配置完全相同,但zone.js 0.8.16不会产生错误。知道为什么吗?

编辑:我一直在试图找出问题出在哪里。如果这是一个无限循环,它到底发生在哪里,但我无法破译 polyfills 或 vendor.xml 中的代码。

我正在使用 Firebase 托管部署我的 Angular 应用程序。使用 localhost 编译和测试时,一切正常。但是当我在 Firebase Hosting 上部署时,我的实时站点永远无法绕过使用 Auth0 登录,在控制台中无休止地给我同样的错误。我怎样才能找出导致错误的确切原因?

这是我在项目中的包列表:

├── @agm/core@1.0.0-beta.1 ├── @angular/cli@1.3.2 ├── @angular/common@4.3.6 ├── @angular/compiler@4.3.6 ├── @angular/compiler-cli@4.3.6 ├── @angular/core@4.3.6 ├── @angular/forms@4.3.6 ├── @angular/http@4.3.6 ├── @angular/platform-browser@4.3.6 ├── @angular/platform-browser-dynamic@4.3.6 ├── @angular/router@4.3.6 ├── @ngx-translate/core@7.2.0 ├── @ngx-translate/http-loader@1.0.2 ├── @types/jasmine@2.5.54 ├── @types/node@8.0.25 ├── angular2-jwt@0.2.3 ├── apollo-angular@0.13.0 ├── apollo-client@1.9.1 ├── auth0-js@8.9.3 ├── bootstrap@4.0.0-alpha.6 ├── codelyzer@3.1.2 ├── core-js@2.5.0 ├── graphql-tag@2.4.2 ├── jasmine-core@2.8.0 ├── jasmine-spec-reporter@4.2.1 ├── jquery@3.2.1 ├── karma@1.7.0 ├── karma-chrome-launcher@2.2.0 ├── karma-cli@1.0.1 ├── karma-coverage-istanbul-reporter@1.3.0 ├── karma-jasmine@1.1.0 ├── karma-jasmine-html-reporter@0.2.2 ├── mq-scss@1.2.4 ├── mydatepicker@2.0.27 ├── ngx-stripe@0.1.0 ├── ngx-swiper-wrapper@4.6.0 ├── protractor@5.1.2 ├── raven-js@3.17.0 ├── replace-in-file@2.6.3 ├── rxjs@5.4.3 ├── sass-mq@3.3.2 ├── ts-node@3.3.0 ├── tslint@5.7.0 ├── typescript@2.3.4 └── zone.js@0.8.17

如果我运行ng serve一切正常,我可以登录。如果我运行ng build --prod然后firebase serve(尝试模拟生产环境)我在尝试登录时收到上述错误。登录 = 只需调用 Auth0 的webAuth客户端库,它永远不会回调我的函数。

0 投票
7 回答
100984 浏览

javascript - Angular 4显示当前时间

在角度 4 变化检测系统中显示当前时间的正确(规范)方法是什么?

问题如下:根据定义,当前时间每时每刻都在不断变化。但 Angular 4 变化检测系统无法检测到它。因此,在我看来,有必要显式调用ChangeDetectorRef::detectChanges. 但是,在调用这个方法的过程中,当前时间自然会改变它的值。这导致ExpressionChangedAfterItHasBeenCheckedError. 在以下示例中(请参阅 live),在加载页面后几秒钟内会出现此错误:

0 投票
1 回答
627 浏览

angular - Angular 4 TestBed compileComponents

我有一个 angular 4 项目,它的灵感来自 angular cli。使用 Angular 4.1.x 一切正常(运行、构建、单元测试、隔离组件测试)。

但是当我移动到安装 4.4.6 的 ^4.2.0 时,我得到了下面描述的以下问题。这实际上是从版本 4.2.2 开始的。

以最简单的情况为例——

component code是_

测试很简单

即使对于此代码,在运行时npm test它也会给我以下错误

这是我为失败和非失败案例安装的软件包列表:

失败时:失败代码的 npm list

传递时:npm list 用于传递代码

0 投票
0 回答
114 浏览

angularjs - 升级 AngularJS 应用程序以包含 Angular 后 - marcoTask 'RequestAnimationFrame' 异常

我们已经将一个大型 AngularJS 应用程序升级到 Angular。升级我的意思是引导 Angular 应用程序,然后引导 AngularJS。

在 Chrome 上似乎一切正常,但是在使用 FireFox 时,我们经常会遇到以下异常:

这是完整的堆栈跟踪:

0 投票
2 回答
5828 浏览

angular - 角度调试上下文错误无法读取属性 ngDebugContext

我将我的 Angular 版本从 2 更新到 4,现在在执行服务时出现此异常:

这个错误被注入了。当我从热的观测值变为冷的观测值时。

0 投票
1 回答
386 浏览

angular - Angular + d3:svg 动画造成可怕的 CD 抖动

所以,我有一个包含一些 d3 的组件。这不是特别复杂。但是 SVG 需要不断地转换。为了做到这一点。一旦执行转换的函数运行,它就会设置超时以在几秒钟内再次调用自己。

当这段代码运行时,我电脑上的风扇立即打开,CPU 跳到 40% +/-。如果我只是构建 svg,然后不在异步循环中运行动画,那么 CPU 只有百分之几。正如我所期望的那样。当我在 DevTools 中暂停 JS 执行时,调用堆栈指向一个 CD 循环。

我的问题是:如何让 d3 动画不强制 Angular 的更改检测运行得如此疯狂?

这是正在运行的代码。它在我的一门课内:

这是我到目前为止所尝试的:

  • 如您所见,我尝试将其与runOutsideAngular调用一起包装。没有帮助。
    • 我将组件的 ChangeDetectionStrategy 更改为 OnPush。没有帮助。
    • 我在 import ofd3之前添加了 import of zone.js,希望d3在区域设置和运行之前所有功能都会初始化。没有帮助。

我只是想让这个动画在 Angular 之外运行。这是组件的示例。如果您打开它,请注意浏览器中该选项卡上的 CPU 使用率会飙升至 30%、40%、50%?https://plnkr.co/edit/VQAuQzA2JzKNoArmgbfn?p=preview

0 投票
1 回答
131 浏览

javascript - 如何通过 chrome-remote-interface 远程评估 Angular 应用程序的承诺

我正在使用 chrome-remote-interface 节点包远程访问 Angular 应用程序。为了评估返回 Promise 的表达式,我使用以下代码片段:

我收到以下错误消息:

我知道,zone.js 正在使用 ZoneAwarePromise 对 Promise 进行猴子修补。这可能是原因,还是我做错了什么?有没有办法使用原生 Promise?

0 投票
2 回答
6071 浏览

angular - Angular Reactive Form:无法设置未定义的属性

我坚持使用 Angular5 ReactiveForm。
实际上,我创建了一个基本模型子

子模型.ts

我也有一个组件: : sub.component.ts

最后,一个 html 模板:

所以我尝试提交表格。我可以使用 获取值,this.subForm.value但是当我尝试分配值时test valuethis.subForm.value.name我在控制台中出现错误。

事实上,我的对象 sub 是未定义的,但为什么我不能赋值。我也更改了 zone.js 版本,但问题仍然存在。我如何分配价值?