0

我目前将 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';

尽管它不会引发错误,但该变量不可用。

想法/评论?

4

2 回答 2

2

ES6 导入等效于

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

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

你所做的相当于

var Horizon = require('@horizon/client').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(...);
}

不完全确定这是否比直接导入 Horizo​​n 有任何好处,但使用 DI 感觉更生硬。

于 2017-03-20T13:49:19.220 回答
0

检查是否@horizon/client在您的node_modules文件夹中,如果没有:尝试npm installhttps://www.npmjs.com/package/@horizo​​n/client)。

于 2017-03-08T11:03:47.117 回答