【问题标题】:Property always undefined when accessing it in Event Handler from SignalR在 SignalR 的事件处理程序中访问属性时始终未定义
【发布时间】:2019-03-28 13:55:28
【问题描述】:

我已经构建了一个 Angular 应用程序,并且我正在使用 signalR 来获取通知。

对于 signalR 的东西,我已经安装了 "@aspnet/signalr": "^1.0.4"。

在 Angular 应用程序中,我构建了一个服务来处理通过 signalR 发送的所有通知:

private _hubConnection: HubConnection;

numberX: number = 0;

constructor() {
  this.createConnection();
  this.registerOnServerEvents();
  this.startConnection();
}

private createConnection() {
  this._hubConnection = new HubConnectionBuilder().withUrl(someURL).build();
}

private startConnection(): void {
  this._hubConnection.start();
}

private registerOnServerEvents(): void {
  this._hubConnection.on('Notify', (data: any) => {
    this.numberX++;
  });
}

当我从 signalR 获得事件时,事件处理程序实际上被调用,当我向控制台输出发送一些东西时,它实际上被写入控制台。

但是当我尝试访问成员属性(在本例中为 numberX)时,我总是收到一个异常,告诉我 numberX 未定义,即使我在一开始就定义了它。

这可能是某种范围的事情吗?

编辑: Kenzk447 的解决方案实际上适用于我给定的场景。但是,如果我更进一步,不仅要增加数量,还要使用组件可以使用的 EventEmitter,这将不起作用:

在服务中:

someEvent: EventEmitter<any> = new EventEmitter();

private registerOnServerEvents(): void {
const $self = this;
this._hubConnection.on('ErrorMessage', (data: any) => {
     $self.someEvent.emit(data);
});

}

在组件中:

notificationCount: number = 0;

this.notificationService.someEvent.subscribe(this.onSomeEvent);

onSomeEvent(data: any) {
    this.notificationCount++;
}

执行此操作时,组件中的“this”未定义,我无法访问组件的属性。

编辑 2:

好的,我可以使用它了 this solution

诀窍是绑定 eventHandler。

尽管如此,我会接受答案,因为它在我给定的示例中有效,并为我指明了正确的方向。

【问题讨论】:

    标签: javascript asp.net angular signalr


    【解决方案1】:

    我研究了 SignalR repo,我 found:

    methods.forEach((m) => m.apply(this, invocationMessage.arguments));
    

    这里的问题:m.apply(this,...,SignalR 试图将“this”强加为 HubConnection 类实例。所以,我的解决方案:

    private registerOnServerEvents(): void {
        const $self = this;
        this._hubConnection.on('Notify', (data: any) => {
             $self.numberX++;
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多