在angular 2服务内加载动态服务

Loading dynamic service inside angular 2 service

本文关键字:服务 加载 动态 angular      更新时间:2023-09-26

我正在尝试做一种套接字处理程序。所以在我的angular 2代码中,我得到了一个名为"socket.service.ts"的服务

此服务导入套接字io lib并创建套接字。

但我正在尝试从json文件中获取不同的处理程序。例如:用户在config.json文件中编辑"handler"键,它应该更改套接字的处理程序。

我希望这个处理程序具有angular 2服务语法。所以我试着用导入这个动态服务

System.import(path).then() 

但这给了我一个假象。

这是我的插座。服务:

private _byHandler() {
  var _this = this;
  this._initHandler((socketHandler) => {
    _this.config = socketHandler.getConfig(_this.config);
    _this._handler = socketHandler;
    _this._createSocket();
  });
}
private _initHandler(callback) {
  let _this   = this,
      handler = this.config.handler,
      path    = "./../handlers/socket/" + handler + "/" + handler + "handler";
  System.import(path).then(callback);
}

谢谢!

好的,我找到了解决方案:首先,我的路径变量不好,我们应该知道System.import返回的值不是类本身,而是包含该类的对象。

所以在.then()中应该做一些类似的事情:

let handlerClass = null;
  for(let k in socketHandler) {
    handlerClass = k; //Get the first key of the object cause we don't know the class name
    break;
  }
  _this._handler = new socketHandler[handlerClass]();