在角度2服务中加载动态服务

时间:2016-07-31 15:11:18

标签: javascript angular dependency-injection websocket dynamic-linking

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

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

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

我希望此处理程序具有角度2服务语法。所以我试图用

导入这个动态服务
System.import(path).then() 

但是它给了我一个假的。

这是我的socket.service:

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);
}

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案: 首先我的路径变量不好,我们应该知道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]();