问题标签 [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 回答
2998 浏览

angular - 何时使用 zone.run()?

我试图阅读很多关于NgZone角度的内容。我知道角度zone.js用于变化检测。我看到一些代码使用了 zone.run 并在其中放置了一些操作。

它实际上是做什么的?

我仍然无法弄清楚实际使用zone.run

在这个链接的帮助下,我明白了一点。

0 投票
0 回答
298 浏览

angular - 具有 ChangeDetectionStrategy.OnPush 的组件的 runOutsideAngular 问题

我正在使用以下指令在 Angular 应用程序中向左滑动和向右滑动手势。

然后在这样的组件中使用

问题是当在 Swipe 指令中我在 runOutsideAngular 中使用 Swipe 订阅时,我的更改检测my-onpush-component不会在 swipe 事件上运行。即使我删除 my-onpush-component 也不会更新ChangeDetectionStrategy.OnPush.

但是,如果我this.zone.runOutsideAngular(() => {从 Swipe 指令中删除一切正常。

谁能指导如何解决这个问题?

0 投票
1 回答
41 浏览

angular - 使用 Angular cdkDrag 更新模型时保留 UI 元素位置

在一个视图中,我有一个使用 Angular cdkDrag 在仪表板上移动元素的组件。

该组件的数据是从订阅 SignalR Hub 的父级(通过单向绑定)向下传递的。

我遇到的问题是在接收到有效负载时,如果任何元素已被移动,它们就会重置回默认的 UI 布局(就像您刷新了页面一样)。

有没有办法阻止这种情况?

我是否需要将新位置存储在缓存中,并在接收到有效负载后,应用前一个位置(来自缓存)?

下面是显示该问题的 StackBlitz。该项目的结构与我的相似: https ://stackblitz.com/edit/angular-cdk-drag-columns-ldd9n2

0 投票
1 回答
1972 浏览

jestjs - Angular 7 Jest 单元测试中的模拟路由器和 Ngzone

我在组件类中使用了 ngzone 和路由器。我的单元测试工作正常,但现在出现错误无法读取未定义的 toLowerCase()。谁能建议我如何模拟 Ngzone 和路由器。

0 投票
1 回答
3677 浏览

angular - Angular 8 - 在前端更改检测问题上调整图像大小

我正在尝试根据我在网上找到的几个教程构建图像压缩器服务。服务本身按预期工作,它接收一个作为 File的图像,然后压缩它并返回一个Observable。一切都很好,除了我想在我的组件中使用压缩图像,然后再将其上传到服务器。

该组件不会检测到新的压缩图像何时通过异步管道到达。如果我手动订阅 Observable ,我会按预期获得图像数据,但如果我尝试用它更新组件属性,它不会立即更改视图,而是使用旧的“图像数据”更改它,如果我尝试压缩一个新的 Image 。

我发现如果部分代码在 ngZone 之外解析,则可能会出现此问题,因此我找到了一种解决方法(请参阅下面的代码)注入ApplicationRef并使用.tick() 确实效果很好,但使我的服务几乎不可重用。

我的问题是: 服务代码的哪一部分在 ngZone 之外运行,有哪些可能的修复或解决方法,因此服务可以在其他组件中重用,而不必在每次服务发出数据时注入 ApplicationRef 和 .tick()。

这是我的服务代码

这是我的component.ts

这是我的组件的HTML 模板

我展示代码的方式非常完美。尝试注释掉 this.ar.tick(); component.ts文件的Compress Method中查看更改。

0 投票
0 回答
153 浏览

angular - ngZone 为 noop 时无角度插值

我知道如果我在 main.ts 文件中将 ngZone 设置为“noop”,我将不得不手动检测组件中的更改。在这种情况下如何手动检测更改?我想更新我的 formDataIncome 值以更改图表中的数据(效果很好)。只是插值不起作用。

提前致谢!

我的组件:

0 投票
1 回答
1162 浏览

angular - Ionic4 ion-slide,循环配置打开时不工作的属性

用简单的再现

循环无法正常工作。实际上,由于循环,我们应该看到第 4 项(实际上是第一项),但点击事件没有触发。

有什么线索吗?

0 投票
0 回答
68 浏览

javascript - 在大量阻塞计算之前和之后更新 DOM

在执行一些包含大量计算的同步操作时,显示之前和之后的内容可能是一个问题。

组件模板:

服务

执行 myFunction 实际上不会显示微调器。

我修复的一种方法是用 setTimeout 包装繁重的函数,如下所示:

它有效,但对我来说不是一个干净的解决方案。myFunction() 中的 applicationRef.tick(),将 myFunction 内容包装在 this.zone.run() 或 changeDeetctionRef.detectChanges() 变体中并不能解决问题。

0 投票
1 回答
3763 浏览

html - ERROR Error: InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe' even when returning an observable

I found few questions with same title and, as far as I could see, some of them are suggesting that the solution is basically return an Observable instead of an array (others are about FireBase which isn't my case). Well, as far I am concern, the code below does return an Observable (look at "getServerSentEvent(): Observable {return Observable.create ...")

My final goal is get all events from a stream returned from a Rest WebFlux. I didn't past bellow the backend because I am pretty sure the issue is related to some mistake in Angular.

On top of that, I can debug and see the events properlly comming to extratos$ from app.component.ts(see image bellow).

Whole logs

app.component.ts

sse.service.ts

app.component.html

Evidence that the observable extratos$ is filled in

enter image description here

0 投票
1 回答
2109 浏览

angular - 在服务上收到回调后 Angular 9 刷新组件

我是 Angular 的新手,也有点迷茫。我正在尝试在 Angular 应用程序中实现 google 登录,但我无法使其工作。这个想法是显示登录按钮,一旦用户完成它,刷新显示他的数据和照片的组件。

我设法使用他们的方法初始化 gApi 并订阅登录事件,但我不知道如何在调用相应的侦听器后重新加载组件。我一直在尝试使用 subject.AsObservable() -> subscription 来尝试处理这个问题,即使我知道回调被调用,组件也不会更新。

一位朋友告诉我使用 EventEmmitter 来处理这个问题,但是由于回调在服务内部并且我不需要重新加载父级,我不确定这是否会起作用。

另外,我正在阅读有关 ngZones 的文章,这可能会成功(但我不确定这是否是一种反模式)。我在这里写下我现在拥有的代码。

header.html

头文件.ts

google.service.ts

任何建议都将受到欢迎。

谢谢!!