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
