typescript - Hur man kastar en händelse i Angular2 när signalR anropade klienten


I en SignalR-tjänst inne i min Angular2-applikation vill jag sända ett evenemang när jag får ett evenemang från servern.

@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
            });
    }
}

Hur kan jag få tillgång till EventEmitter som jag har initierat och skicka ett event som jag kan prenumerera på från utsidan?

Tack

Med vänliga hälsningar Tenoda

Svar #1

Du skulle kunna prova något liknande:

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);
  });
}

Med pilarfunktioner kan du använda this-nyckelordet direkt inom callback-funktioner. Detta svar kan också hjälpa dig: Angular 2 kan inte anropa klassfunktion.

Hoppas det hjälper dig, Thierry

Svar #2

Tilldela bara detta till det och använd det,

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);
     });
  }

Galet va ;). variabelomfånget för this är inte det this som du behöver så this har inte emit men genom att tilldela this till that har vi nu emit