当signalR调用客户端时,如何在Angular2中抛出事件

时间:2016-01-18 14:28:09

标签: events typescript signalr angular

在angular2-Application中的SignalR-Service中,当我从服务器收到一个事件时,我想播放一个事件。

@Injectable() export class SignalRService {

   //...
    private emitMe: EventEmitter<any>;

constructor() {
        this.emitMe = new EventEmitter();
        this.connection = jQuery.hubConnection(".../signalr/");
        this.proxy = this.connection.createHubProxy("...");
        this.wireupEvents();
        //...
    }

wireupEvents(): void {
    this.proxy.on('ItemAdded', function(data) {
            console.log('received ItemAdded' + JSON.stringify(data));
                //How to throw event here??? Like $rootScope.$emit('itemAdded', data);
                // 'this.emitMe' is not reachable here
            });
    }
}

如何访问我初始化的EventEmitter并抛出一个我可以从外部订阅的事件呢?

由于

关注Tenoda

2 个答案:

答案 0 :(得分:2)

你可以尝试类似的东西:

constructor() {
  this.emitMe = new EventEmitter();
  //...
}

wireupEvents(): void {
  this.proxy.on('ItemAdded', (data) => {
    console.log('received ItemAdded' + JSON.stringify(data));
    let someObject = (...)
    this.emitMe.emit(someObject);
  });
}

使用箭头功能,您可以直接在回调中使用this关键字。这个答案也可以帮助你:Angular 2 can't call class function

希望它可以帮到你, 亨利

答案 1 :(得分:0)

只需将其分配给它并使用它,

private emitMe: EventEmitter<any> =  new EventEmitter();

wireupEvents(): void {
    let that = this;
    this.proxy.on('ItemAdded', function(data) {
            console.log('received ItemAdded' + JSON.stringify(data));
            that.emitMe.emit(data);
     });
  }

疯狂吧;)。 this的可变范围不是您需要的this,因此this不能emit,而是将this分配给that现在我们有emit