当前位置: 首页 > 知识库问答 >
问题:

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

柳奇希
2023-03-14

我正试图在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);
  }

现在的问题是,尽管“on_msg”函数是在AppComponent中定义的,但它将自己视为WebSocket对象的一部分,因此它不能访问和操作AppComponent中定义的变量

我该怎么办?

共有1个答案

郑承恩
2023-03-14

使用一个已经制作好的库,比如这个:https://www.npmjs.com/package/angular2-websocket-service

它将利用您能找到的错误,并且通常基于最佳实践...

[edit]RxJS也有类似的功能:

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

 类似资料:
  • 我对Angular2和打字是新手。我试图从我的类中的构造函数获得对@input的访问权。一个服务是从构造函数内部调用的,我需要给它传递一个参数。

  • 我是NodeJS的新手。假设我有一个用Golang的websocket包实现的echo服务器: nodejs客户机代码应该是什么样子?

  • 我是K8s的新手“需要帮助” 现在的问题是。- 如何在k8s AWS中旋转私人容器服务,这些服务是私人的,我只能访问?

  • 问题内容: 如果我有类似的东西 我想从我拥有的地方访问,该怎么办? 问题答案: 推荐用于16.3之前的React版本 如果无法避免,那么从React文档中提取的建议模式将是: 该 家长 转发绑定到一个功能道具 家长 。当呼叫作出反应的 儿童的 道具也将分配 孩子的 给 父母的 财产。 建议用于React> = 16.3 引用转发是一种选择加入功能,它使某些组件可以接收它们收到的引用,并将其进一步向

  • Hyperf 提供了对 WebSocket Server 的封装,可基于 hyperf/websocket-server 组件快速搭建一个 WebSocket 应用。 安装 composer require hyperf/websocket-server 配置 Server 修改 config/autoload/server.php,增加以下配置。 <?php 'servers' => [

  • 我在react native中有一个搜索栏组件,它在父组件中导入, SearchBar子组件具有以下元素: 是否可以访问此子组件在其中导入的父组件中的状态?提前感谢你的帮助

  • 我正在尝试使用Angular2和Http POST对SOAP web服务进行一个非常简单的调用。如果我使用POSTMAN发布相同的消息,只需将内容类型设置为text/xml即可。 对于Angular2,我得到了以下错误:- SEC7120:原点http://localhost:3004在Access Control Allow Origin标头中找不到 SCRIPT7002: XMLHttpReq

  • 本文向大家介绍如何在子组件中访问父组件的实例?相关面试题,主要包含被问及如何在子组件中访问父组件的实例?时的应答技巧和注意事项,需要的朋友参考一下 vue中如果父组件想调用子组件的方法,可以在子组件中加上ref,然后通过this.$refs.ref.method调用(https://www.cnblogs.com/jin-zhe/p/9523029.html) Vue中子组件调用父组件的方法,这里