我正在尝试在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中定义的变量。
我该怎么办?
答案 0 :(得分:1)
使用已经制作的库,例如: https://www.npmjs.com/package/angular2-websocket-service
它会利用您可以找到的错误,并且通常基于最佳做法......
[编辑] RxJS也有同等的东西:
https://github.com/ReactiveX/rxjs/blob/master/src/observable/dom/WebSocketSubject.ts