当鼠标不在浏览器文档

时间:2016-11-13 23:59:51

标签: angular signalr

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

当我使用Angular入门套件在开发场景下运行时,这一点非常有效。

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

我假设那里有某种表现的事情,但我认为对于我的情况来说,使用SystemJS时的表现很好,除了整个下载200个js文件的东西:)

我是否需要做一些事情来触发SignalR事件的更新,或者我可以做些什么来获得我之前获得的相同行为,即使我将焦点放在另一个应用程序中,视图也会自动更新?

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

1 个答案:

答案 0 :(得分:3)

我有完全相同的问题。我猜测Angular 2没有没有补丁WebSocket或者signalR正在使用一些非标准的API。

正如@Gerald所做的那样,NgZone.run也为我工作。

@Igor Lizunov,以下是如何使用NgZone.run()

导入ZgZone

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

注入构造函数

constructor(private zone: NgZone)

在signalR处理程序中运行ZgZone

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