所以我有一个我在Angular2中开发的应用程序。它所做的一件事就是从SignalR接收事件并在浏览器中更新数据。
当我使用Angular入门套件在开发场景下运行时,这一点非常有效。
现在我使用angular-cli捆绑应用程序,它仍然部分工作,但似乎已经破坏了。如果在收到SignalR事件时鼠标不在浏览器的文档窗口内,则不会发生DOM更新。即使鼠标位于浏览器的地址栏中,也未位于选项卡上,它仍然不会更新。我可以在控制台窗口中看到日志,显示已收到事件并且数据已更新,但视图未更新。
我假设那里有某种表现的事情,但我认为对于我的情况来说,使用SystemJS时的表现很好,除了整个下载200个js文件的东西:)
我是否需要做一些事情来触发SignalR事件的更新,或者我可以做些什么来获得我之前获得的相同行为,即使我将焦点放在另一个应用程序中,视图也会自动更新?
更新:我发现如果我在NgZone.run
块中运行SignalR处理程序内部的代码,那就可以了。这可能已经足够了,但如果我能够像在原始开发环境中那样工作,那就更好了。
答案 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(() => { });
});