如何从socket异步获取数据并显示在页面上?

How to get data async from socket and display it on page?

有变量:

public message: any;

然后在模板中我尝试显示消息是否为空:

<div *ngIf="message">Message</div>

但是只有当我点击放置 div 的区域时才会显示消息。

完整代码为:

ngOnInit() {
    connection.on("receivePassportData", data => {
       console.log(data);
       this.message = data;
    });
}

我在 console.log(data); 中获取数据,但消息未在模板中呈现。

<div *ngIf="message && Object.keys(message).length > 0">Message</div>

试试这个。

您可以使用 NgZone

在区域中显式 运行 此代码
 constructor(private zone: NgZone)  {}

 public connect(options: any) {
   // custom code
   [...]

  // socket event
  this.socket.on('receivePassportData', (data) => {
    this.zone.run(() => {
        this.message = data;
    });     
  });
 }

如需更多帮助,请查看 here

此外,我建议您创建一个

  1. Angular订阅服务器提供的数据流的服务。
  2. 创建一个订阅服务器提供的数据流的Angular服务。
  3. 将 Angular 服务中接收到的数据(来自服务)发送给 Observable 订阅者
  4. 然后在组件 ngOnInit 方法中订阅服务 Observable。

如需更多帮助,请查看 here

希望对您有所帮助!