将 Horizo​​n IO 导入 angular 2 项目的正确方法

Correct way to import Horizon IO into angular 2 project

我目前将 Horizo​​nIO 导入我的 angular 2 项目的方式如下:

var horizon = require('@horizon/client');

@Injectable()
export class DbService {
    private horizon;

    constructor() {
        this.horizon = Horizon({host: 'localhost:8181'});
    }
}

现在我觉得这不是正确的方法,因为我应该能够

import { Horizon } from '@horizon/client';

虽然它没有抛出错误,但该变量不可用。

Thought/comments?

检查 @horizon/client 是否在您的 node_modules 文件夹中,如果不在:尝试 npm install (https://www.npmjs.com/package/@horizon/client).

相当于

的 ES6 导入
var Horizon = require('@horizon/client');

import * as Horizon from '@horizon/client';

你所做的相当于

var Horizon = require('@horizon/client').Horizon;

编辑:

我现在使用以下代码使 horizon 可注射:

import { Injectable } from '@angular/core';
import * as Hz from '@horizon/client';

@Injectable()
export class Horizon extends Function {
  private _hz;

  constructor() {
    super('...args', 'return this._hz(...args)');
    this._hz = new Hz({host: 'localhost:8181'});

    return this.bind(this);
  }
}

然后可以像直接导入它一样注入和调用它:

constructor(hz: Horizon){
  hz('messages').watch().subscribe(...);
}

不确定这是否比直接导入 Horizon 有任何好处,但使用 DI 感觉更有棱角。