angular - 尽管新数据来自 websockets,但视图数据不会更新
问题描述
我有一个控制器来维护向我的 Web 应用程序显示日志。日志通过 SignalR 从 ASP.NET Core API 发送。
情况是当我第一次进入站点时,新的传入日志会正确显示。但是当我切换到我的 Web 应用程序的另一个页面并返回日志时,虽然我可以看到控制台中有新日志传入,但日志控制器的视图不会更新。
我的日志控制器如下所示:
export class LoggerComponent implements OnInit {
hubConnection: HubConnection;
public logs: Array<LogMessage> = new Array<LogMessage>();
constructor(private alertService: AlertService,
private loaderService: LoaderService,
private signalRHandler: SignalRHandler,
) {
// Here I subscribe to event that is called if WebSocket connection was
// lost and renewed so I can acquire new instance of HubCOnnection
// and subscribe to Hub events
this.signalRHandler.onAcquireNewHubInstance.subscribe((acquire) => {
if (acquire) {
this.acquireHubInstance();
}
});
}
ngOnInit() {
// As you can see I tried to re-subscribe to HubEvents and this works
// but when I refresh the app the log messages are duplicated.
//this.acquireHubInstance();
}
acquireHubInstance() {
this.hubConnection = this.signalRHandler.hubConnection;
this.hubConnection.on('BroadcastLogMessage', (data) => {
console.log(data)
if (this.logs.length < 2000) {
this.logs.push(data);
}
});
}
}
解决方案
推荐阅读
- reactjs - Bootstrap Carousel 在我的反应项目中不起作用。我已经尝试了一切,但仍然无法正常工作
- bash - bash:在同一行回显具有延迟的短语
- python - 用同一数据框的另一列替换迭代的列集
- php - 如何在 Laravel 8 中让我的数组构建速度更快?
- c# - 通过datagridview中的选定行使用第二种形式更改数据库表
- asp.net - 从 Aspx 页面捕获文本
- excel - 如何检查(直接在公式中)是否已经在前几行中计算了条目(以避免重复条目)?
- c# - 为什么我的类库是一个未被引用的程序集?
- html - 如何修复点击 CSS 上的过渡动画
- r - 如何分隔列,将它们转换为 R 中的数字