问题标签 [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.
angular - 何时使用 zone.run()?
我试图阅读很多关于NgZone
角度的内容。我知道角度zone.js
用于变化检测。我看到一些代码使用了 zone.run 并在其中放置了一些操作。
它实际上是做什么的?
我仍然无法弄清楚实际使用zone.run
在这个链接的帮助下,我明白了一点。
angular - 具有 ChangeDetectionStrategy.OnPush 的组件的 runOutsideAngular 问题
我正在使用以下指令在 Angular 应用程序中向左滑动和向右滑动手势。
然后在这样的组件中使用
问题是当在 Swipe 指令中我在 runOutsideAngular 中使用 Swipe 订阅时,我的更改检测my-onpush-component
不会在 swipe 事件上运行。即使我删除 my-onpush-component 也不会更新ChangeDetectionStrategy.OnPush
.
但是,如果我this.zone.runOutsideAngular(() => {
从 Swipe 指令中删除一切正常。
谁能指导如何解决这个问题?
angular - 使用 Angular cdkDrag 更新模型时保留 UI 元素位置
在一个视图中,我有一个使用 Angular cdkDrag 在仪表板上移动元素的组件。
该组件的数据是从订阅 SignalR Hub 的父级(通过单向绑定)向下传递的。
我遇到的问题是在接收到有效负载时,如果任何元素已被移动,它们就会重置回默认的 UI 布局(就像您刷新了页面一样)。
有没有办法阻止这种情况?
我是否需要将新位置存储在缓存中,并在接收到有效负载后,应用前一个位置(来自缓存)?
下面是显示该问题的 StackBlitz。该项目的结构与我的相似: https ://stackblitz.com/edit/angular-cdk-drag-columns-ldd9n2
jestjs - Angular 7 Jest 单元测试中的模拟路由器和 Ngzone
我在组件类中使用了 ngzone 和路由器。我的单元测试工作正常,但现在出现错误无法读取未定义的 toLowerCase()。谁能建议我如何模拟 Ngzone 和路由器。
angular - Angular 8 - 在前端更改检测问题上调整图像大小
我正在尝试根据我在网上找到的几个教程构建图像压缩器服务。服务本身按预期工作,它接收一个作为 File的图像,然后压缩它并返回一个Observable。一切都很好,除了我想在我的组件中使用压缩图像,然后再将其上传到服务器。
该组件不会检测到新的压缩图像何时通过异步管道到达。如果我手动订阅 Observable ,我会按预期获得图像数据,但如果我尝试用它更新组件属性,它不会立即更改视图,而是使用旧的“图像数据”更改它,如果我尝试压缩一个新的 Image 。
我发现如果部分代码在 ngZone 之外解析,则可能会出现此问题,因此我找到了一种解决方法(请参阅下面的代码)注入ApplicationRef并使用.tick() 确实效果很好,但使我的服务几乎不可重用。
我的问题是: 服务代码的哪一部分在 ngZone 之外运行,有哪些可能的修复或解决方法,因此服务可以在其他组件中重用,而不必在每次服务发出数据时注入 ApplicationRef 和 .tick()。
这是我的服务代码:
这是我的component.ts:
这是我的组件的HTML 模板:
我展示代码的方式非常完美。尝试注释掉 this.ar.tick(); 在component.ts文件的Compress Method中查看更改。
angular - ngZone 为 noop 时无角度插值
我知道如果我在 main.ts 文件中将 ngZone 设置为“noop”,我将不得不手动检测组件中的更改。在这种情况下如何手动检测更改?我想更新我的 formDataIncome 值以更改图表中的数据(效果很好)。只是插值不起作用。
提前致谢!
我的组件:
angular - Ionic4 ion-slide,循环配置打开时不工作的属性
用简单的再现
循环无法正常工作。实际上,由于循环,我们应该看到第 4 项(实际上是第一项),但点击事件没有触发。
有什么线索吗?
javascript - 在大量阻塞计算之前和之后更新 DOM
在执行一些包含大量计算的同步操作时,显示之前和之后的内容可能是一个问题。
组件模板:
服务
执行 myFunction 实际上不会显示微调器。
我修复的一种方法是用 setTimeout 包装繁重的函数,如下所示:
它有效,但对我来说不是一个干净的解决方案。myFunction() 中的 applicationRef.tick(),将 myFunction 内容包装在 this.zone.run() 或 changeDeetctionRef.detectChanges() 变体中并不能解决问题。
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
angular - 在服务上收到回调后 Angular 9 刷新组件
我是 Angular 的新手,也有点迷茫。我正在尝试在 Angular 应用程序中实现 google 登录,但我无法使其工作。这个想法是显示登录按钮,一旦用户完成它,刷新显示他的数据和照片的组件。
我设法使用他们的方法初始化 gApi 并订阅登录事件,但我不知道如何在调用相应的侦听器后重新加载组件。我一直在尝试使用 subject.AsObservable() -> subscription 来尝试处理这个问题,即使我知道回调被调用,组件也不会更新。
一位朋友告诉我使用 EventEmmitter 来处理这个问题,但是由于回调在服务内部并且我不需要重新加载父级,我不确定这是否会起作用。
另外,我正在阅读有关 ngZones 的文章,这可能会成功(但我不确定这是否是一种反模式)。我在这里写下我现在拥有的代码。
header.html
头文件.ts
google.service.ts
任何建议都将受到欢迎。
谢谢!!