问题标签 [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.
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 文件);虽然我通常喜欢避免做这些事情,但这似乎是迄今为止最安全的选择。
javascript - 与 Zone.js 一起使用时,正文事件 StopPropagation() 不起作用
总的来说,我正在做的是我有一个日期选择器,点击会冒泡到正文,我还有一个 ag-grid,它有一个列菜单,用于侦听正文的点击并关闭菜单。请参阅 plunkr,只需单击 DOB 旁边的汉堡包并转到过滤器,然后单击日期选择器并选择一个日期。注意菜单没有关闭。它保持打开状态是因为在 app.component 中添加了事件侦听器,该事件侦听器会在事件到达主体后阻止事件传播到网格。一切都按照我的理解工作。
https://plnkr.co/edit/QDUVOUEHJYMNSumVFICc?p=preview
我遇到的问题是我的应用程序中完全相同的设置不起作用。事件处理程序以正确的顺序被调用,但由于某种原因,即使在使用相同的处理程序取消事件后,在我的应用程序中,网格仍然会获取事件并关闭菜单。我在这里寻找的是一些可能导致我所看到的行为的想法。显然我会设置一个 plunkr 来演示,但我不能,因为它似乎可以工作三个,我可以上传我的整个应用程序。
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
客户端库,它永远不会回调我的函数。
javascript - Angular 4显示当前时间
在角度 4 变化检测系统中显示当前时间的正确(规范)方法是什么?
问题如下:根据定义,当前时间每时每刻都在不断变化。但 Angular 4 变化检测系统无法检测到它。因此,在我看来,有必要显式调用ChangeDetectorRef::detectChanges
. 但是,在调用这个方法的过程中,当前时间自然会改变它的值。这导致ExpressionChangedAfterItHasBeenCheckedError
. 在以下示例中(请参阅 live),在加载页面后几秒钟内会出现此错误:
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 用于传递代码
angularjs - 升级 AngularJS 应用程序以包含 Angular 后 - marcoTask 'RequestAnimationFrame' 异常
我们已经将一个大型 AngularJS 应用程序升级到 Angular。升级我的意思是引导 Angular 应用程序,然后引导 AngularJS。
在 Chrome 上似乎一切正常,但是在使用 FireFox 时,我们经常会遇到以下异常:
这是完整的堆栈跟踪:
angular - 角度调试上下文错误无法读取属性 ngDebugContext
我将我的 Angular 版本从 2 更新到 4,现在在执行服务时出现此异常:
这个错误被注入了。当我从热的观测值变为冷的观测值时。
angular - Angular + d3:svg 动画造成可怕的 CD 抖动
所以,我有一个包含一些 d3 的组件。这不是特别复杂。但是 SVG 需要不断地转换。为了做到这一点。一旦执行转换的函数运行,它就会设置超时以在几秒钟内再次调用自己。
当这段代码运行时,我电脑上的风扇立即打开,CPU 跳到 40% +/-。如果我只是构建 svg,然后不在异步循环中运行动画,那么 CPU 只有百分之几。正如我所期望的那样。当我在 DevTools 中暂停 JS 执行时,调用堆栈指向一个 CD 循环。
我的问题是:如何让 d3 动画不强制 Angular 的更改检测运行得如此疯狂?
这是正在运行的代码。它在我的一门课内:
这是我到目前为止所尝试的:
- 如您所见,我尝试将其与
runOutsideAngular
调用一起包装。没有帮助。- 我将组件的 ChangeDetectionStrategy 更改为 OnPush。没有帮助。
- 我在 import of
d3
之前添加了 import ofzone.js
,希望d3
在区域设置和运行之前所有功能都会初始化。没有帮助。
我只是想让这个动画在 Angular 之外运行。这是组件的示例。如果您打开它,请注意浏览器中该选项卡上的 CPU 使用率会飙升至 30%、40%、50%?https://plnkr.co/edit/VQAuQzA2JzKNoArmgbfn?p=preview
javascript - 如何通过 chrome-remote-interface 远程评估 Angular 应用程序的承诺
我正在使用 chrome-remote-interface 节点包远程访问 Angular 应用程序。为了评估返回 Promise 的表达式,我使用以下代码片段:
我收到以下错误消息:
我知道,zone.js 正在使用 ZoneAwarePromise 对 Promise 进行猴子修补。这可能是原因,还是我做错了什么?有没有办法使用原生 Promise?
angular - Angular Reactive Form:无法设置未定义的属性
我坚持使用 Angular5 ReactiveForm。
实际上,我创建了一个基本模型子
子模型.ts:
我也有一个组件: : sub.component.ts
最后,一个 html 模板:
所以我尝试提交表格。我可以使用 获取值,this.subForm.value
但是当我尝试分配值时test value
,this.subForm.value.name
我在控制台中出现错误。
事实上,我的对象 sub 是未定义的,但为什么我不能赋值。我也更改了 zone.js 版本,但问题仍然存在。我如何分配价值?