gpt4 book ai didi

当鼠标不在浏览器文档中时,Angular2 不会从 SignalR 处理程序更新组件

转载 作者:行者123 更新时间:2023-12-04 14:28:39 27 4
gpt4 key购买 nike

所以我有一个在 Angular2 中开发的应用程序。它所做的其中一件事是从 SignalR 接收事件并更新浏览器中的数据。

当我在使用 Angular 初学者工具包的开发场景下运行时,它一直运行良好。

现在我正在使用 angular-cli 来捆绑应用程序,它仍然可以部分工作,但似乎有什么地方坏了。如果在收到 SignalR 事件时鼠标不在浏览器的文档窗口内,则不会发生 DOM 更新。即使鼠标位于浏览器的地址栏或选项卡上,它仍然不会更新。我可以在控制台窗口中看到日志,显示事件已收到且数据已更新,但 View 未更新。

我假设那里发生了某种性能问题,但我认为就我而言,性能与使用 SystemJS 时一样好,除了整个下载 200 个 js 文件的事情:)

我需要做些什么来触发 SignalR 事件的更新,或者我可以做些什么来获得我以前得到的相同行为, View 会自动更新,即使我专注于另一个应用程序?

更新:我发现如果我在 NgZone.run block 中运行 SignalR 处理程序内部的代码,它就可以工作。这可能已经足够好了,但如果我能让它像在原始开发环境中那样工作就更好了。

最佳答案

我有完全相同的问题。我猜测要么是 Angular 2 没有猴子修补 WebSocket,要么是 signalR 使用了一些非标准的 API。

就像对@Gerald 所做的那样,NgZone.run 也对我有用。

@Igor Lizunov,这是使用 NgZone.run() 的方法

导入ZgZone

import { NgZone } from '@angular/core';

注入(inject)构造函数

constructor(private zone: NgZone)

在 signalR 处理程序中运行 ZgZone

hub.on("signalr-event-name", data => {
/*do something with the data*/
this.zone.run(() => { });
});

关于当鼠标不在浏览器文档中时,Angular2 不会从 SignalR 处理程序更新组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40580175/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com