在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
答案 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