问题标签 [ngzone]

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 回答
24 浏览

angular - nativescript-background-http 分离视图

我正在使用 naticescript 和 angular 创建应用程序。我已经用消息实现了进度指示器。虽然从角度组件进行测试,但一切正常,但是当我开始使用真正的 nativescript-background-http 进度指示器时,视图似乎变得分离,因为它停止更新,直到我在视图中调用 detectChanges 或使用 ngZone.run 从上传功能发布消息。这一切都是可以理解的,但稍后我将其他消息(rxjs)从普通组件发布到相同的进度指示器,我看到它们在控制台中出现,但显示值没有更新。

为什么存在于单独组件中的进度指示器会分离?

0 投票
1 回答
448 浏览

angular - Angular8+ ngswitch 嵌套组件不更新视图

我对组件视图渲染有一个奇怪的问题。我处理的部分组件如下所示:

Comp2 使用一些共享组件,如下所示:

我遇到的问题是,<change-quantity>如果我用 初始化父组件,则不会呈现模型更改step = 'step2',但是如果我从开始step='step1'然后转到step='step2'它则效果很好。更改数量如下所示:

我找到了ngZone更改产品数量模型时使用的解决方法,但我认为这不是正确的方法。我很乐意找到比ngZone手动触发更好的方法。

UPD:我试着

  1. *ngSwitch用几个s替换*ngIf- 没有成功
  2. 试图通过像这样重新创建数组来强制更改检测(也没有成功):
0 投票
0 回答
200 浏览

angular - 在 NgRx 中使用异步管道无法正确更新视图

我已经看到了一些与此类似的问题,但我仍在努力解决我在特定应用程序中遇到的错误。我正在使用 NgRx 和 Angular。

.html 文件

  • 在组件的.html文件中,我有如下内容。我曾经asyncselectedOverlayLayers$observable 中获取最新值。正如您可能已经猜到的那样,这个想法是抓取用户选择的图层并将它们显示在列表中。
  • alterLayers()打开一个对话框,用户可以在其中更改“选择”哪些图层

组件.ts 文件

  • component.tshasselectedOverlayLayers$从 NgRx 存储中获取所选图层值的数组,如下所示:
  • 该组件还控制打开对话框并使用从显示给用户的对话框中收集的结果,用户可以在其中选择他们想要查看的图层。一旦用户点击提交,我们使用result触发一个用新值更新 store 的操作。

问题:

  • 使用表示所选图层的新列表的新数组正确更新存储
  • 但是,直到我单击组件本身中的选项卡或其他内容后,UI 才会更新,然后才会在列表中正确显示层。

我尝试添加private ngZone: NgZone到构造函数并运行this.ngZone.run(() => this.store.dispatch(updateSelectedOverlayLayers({ selectedLayers: result }),但这对我不起作用。

0 投票
1 回答
235 浏览

angular - 即使在 NgZone.run() 中订阅也不起作用

我阅读了有关如何在 Angular 中使用 NgZone 的文章。但是我仍然无法在第一次执行调用中输入订阅。请帮我解决一下这个。提前致谢 :)

}

我要执行的方法:

我有一个从 API 获取数据的服务。数据正在从 API 返回,但订阅在第一次调用中不起作用,我将这两个值都设为未定义。我知道这是因为 Angular 中的异步调用,所以我像这样将我的方法包装在 NgZone 中,但似乎没有任何效果。

我为这两个值做了console.log,但它们在第一次调用中未定义,但在订阅了其他一些方法执行数据之后。我希望这些值在第一次调用本身中得到更新。我是Angular的初学者,请帮忙:)

getData() 方法:

0 投票
1 回答
319 浏览

angular - 使用带有 NOOP 的 Angular 9 添加 Web 组件构建后,更改检测无法正常工作

我们使用 v9 构建的 Angular 元素创建了一个 Web 组件。noopngZone引导模块时应用。

创建一个连接 core-js polyfills 和 webcomponents.js(按顺序)的脚本:

  • src/js/core-js/minified.js
  • node_modules/@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js
  • node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js
  • es5 捆绑包

这样做的原因是:

  • 我们需要支持 IE11 (core-js polyfill)
  • 我们需要使用 shadow dom (webcomponents-bundle.js)

当将生成的 Web 组件脚本注入到使用 ZoneJS 运行的 Angular 7 应用程序中时。之后,所有更改检测都不再在应用程序上运行。Click 不起作用,Angular Lifecycle 钩子不会按预期触发(例如,它在更改路由时触发,因为 ApplicationRef.tick() 被调用globalZoneAwareCallback)。

我很难调试这个并知道根本原因。我最初在考虑我的 Angular 应用程序来订阅路由事件并触发tick(). https://github.com/angular/angular/issues/34150

但我想知道这个的根本原因。如果有人能提供见解,我将不胜感激。

0 投票
0 回答
151 浏览

arcgis - 地图上的单击事件未重新加载几何多边形 Angular 10,ArcGIS 4.16

我有一个角度为 10 的 arcGIS 地图。多边形是根据 wkid 和投影的环值在地图上绘制的。单击地图时,我需要重新绘制多边形。单击事件从最热()的地图中收集 ID,我需要重新绘制多边形。我正在使用'hitself.router.navigateByUrl(dashurl);' 重新加载页面以显示更新的多边形。但是多边形没有在与检索到的 id 对应的地图上绘制。我发现 wkid 的值和环没有正确更新。我做错什么了吗?请在下面找到我的代码。

0 投票
2 回答
612 浏览

angular - 为什么 Angular 异步管道使用 cdr.markForCheck() 而不是 cdr.detectChanges()?

我有一个一般的 Angular 问题:

为什么 Angularasync管道使用cdr.markForCheck()而不是cdr.detectChanges()

我看到这两种“风格”有两个主要区别:

  1. markForCheck()标记要检查到根组件的路径 -要更新的内容
  2. markForCheck()让变化检测发生在当前或下一个周期 -定时

我的想法或问题:

  1. 为什么我们需要检查到根的整个路径(在async管道中)?为什么不只是当前组件?( detectChanges()) - 这与要更新的内容有关

  2. 为什么只标记(用于当前/下一个周期 - 在markForCheck()使用 ngZone 时)?为什么不立即检测变化?( detectChanges()) 这与时间有关

  3. 如果没有 ngZone 异步触发器/没有异步操作怎么办?那么视图更新不会发生?

  4. 如果我们将async管道改为使用会发生什么detectChanges()


异步管道

编辑:

当我在文档中多次阅读时,请不要解释每种方法的作用,从async角度来看,我无法理解。我要知道的重要部分是为什么要更新什么时间

0 投票
0 回答
103 浏览

angular - Angular 阻止外部库触发更改检测

我了解当 Angular 在组件中找到此代码时

它将处理程序附加到全局事件侦听器,每次触发 keyup 事件时,它都会调用处理程序,然后触发更改检测。

这个问题不是关于如何在 Angular 之外运行处理程序。

这个问题是关于如果处理程序在我正在使用的外部库中怎么办,并且我想阻止 Angular 触发更改检测。有没有办法选择退出,如果是这样怎么办?

0 投票
0 回答
131 浏览

angular - 如何将“在 Angular 区域外触发的导航”追踪到原点,这是可能的

我的 Angular 11 应用程序在控制台中触发了这个警告:

Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'? core.js:27937

有没有办法将该警告追溯到我的代码中可能引发它的点(假设原点确实在我的代码中)?

0 投票
1 回答
39 浏览

angular - 当服务器发送在多个组件中使用的事件服务时,ngOnInit 不起作用

我创建了一个从后端(节点)获取 SSE(服务器发送事件)的服务。当我在一个组件中使用此服务时,它按预期工作。但是当我第一次尝试在多个组件中使用时,ngoninit 会完美地触发并加载数据。当我导航到一个组件到另一个组件时,ngoninit 没有触发,甚至服务也没有被调用。我希望有人能在这方面提供帮助。

提前致谢。