Angular2中的WebSocket服务,访问父组件

时间:2017-06-07 22:06:23

标签: angular websocket angular2-services angular2-components

我正在尝试在angular2中实现我自己的使用WebSockets的方式,我面临着一个非常愚蠢的问题。

我有一个定义的服务,它有一个方法可以通过获取一个url和两个函数来返回一个WebSocket对象,一个用作“onmessage”,一个用于“onerror”(我已经硬编码了“onopen”和“onclose”因为它们在组件之间没有变化):

    @Injectable()
export class WsService {

    createWebSocket(url: string, onMessage: (e: Event) => any, onError: (e: Event) => any ): WebSocket {
        let ws = new WebSocket(url);
        ws.onopen = function(evt: Event) {
            console.log("Connected!");
        }
        ws.onclose = function(evt: Event) {
            console.log("Disconnected!");
        }
        ws.onmessage = onMessage;
        ws.onerror = onError;
        return ws;
    }
}

然后在我的appComponent中实例化一个WebSocket对象,如下所示:

ngOnInit(){
this.ws = this._ws.createWebSocket("ws://localhost:63562", this.on_msg, this.on_err);
}

on_msg(e: Event) {
      this.blah = e["data"];
  }

  on_err(e: Event) {
      console.log(e);
  }

现在问题是,即使在AppComponent中定义了“on_msg”函数,它也将自己视为WebSocket对象的一部分,因此它无法访问和操作AppComponent中定义的变量。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

使用已经制作的库,例如: https://www.npmjs.com/package/angular2-websocket-service

它会利用您可以找到的错误,并且通常基于最佳做法......

[编辑] RxJS也有同等的东西:

https://github.com/ReactiveX/rxjs/blob/master/src/observable/dom/WebSocketSubject.ts