首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在signalR调用客户端时在Angular2中引发事件

如何在signalR调用客户端时在Angular2中引发事件
EN

Stack Overflow用户
提问于 2016-01-18 22:28:09
回答 2查看 1.7K关注 0票数 3

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

代码语言:javascript
复制
@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

EN

回答 2

Stack Overflow用户

发布于 2016-01-18 23:19:50

你可以试着这样做:

代码语言:javascript
复制
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

希望对你有帮助,蒂埃里

票数 2
EN

Stack Overflow用户

发布于 2017-07-11 22:30:21

只需将这个赋值给那个并使用它,

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34857124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档