我正在尝试在Angular2中实现自己的使用Websocket的方式,而我面临着一个非常愚蠢的问题。
我有一个服务定义的服务,它具有一种方法,可以通过获取URL和两个功能来使您回到Websocket对象,一个用作" OnMessage",一种用于" OnError"(我已经硬编码了" onopen"one_answers" 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中定义的变量。
。我该怎么办?
使用像这样的已经制作的库:https://www.npmjs.com/package/angular2-websocket-service
它将利用您可以找到的错误,并且通常是基于最佳实践...
[编辑]rxjs也有等效的东西:
https://github.com/reactivex/rxjs/blob/master/src/src/observable/dom/websocketsubject.ts