我正在尝试将npm模块“ ajv”导入我的Ionic 2(Angular 2)项目。 (https://epoberezkin.github.io/ajv/

我运行了“ npm install ajv --save”,然后对我的app.modules.js文件进行了以下更改:

import { Ajv } from 'ajv';

...
providers : [
    Ajv,
    ...
]


但是,当我编译时,出现错误:

'Ajv' only refers to a type, but is being used as a value here.
c:/Users/me/Documents/Ionic/MyApp/src/app/app.module.ts


有没有更好的方法来引入该库?

最佳答案

NgModule中的providers数组可与@Injectable组件或其他功能类似的“提供者”或“服务”一起使用。该库似乎不符合该设计。

您可能真正想要做的就是在应用程序组件中而不是在AppModule中使用导入。导入是指“符号”的简单ES6样式import,然后直接在代码中使用。

因此,例如example.component.ts:

import { Component } from '@angular/core';
import { Ajv } from 'ajv';

@Component({
  selector: 'app-example',
  templateUrl: './example.component.html',
  styleUrls: ['./example.component.css']
})
export class ExampleComponent {

  myMethod() {
     // Just use Ajv here
  }

}


无需将其放入装饰器数组中。

如果您想以“类似服务的方式”使用导入的第三方库,则一定要将其包装为@Injectable服务,但使用量将与上面的示例基本相同。

10-06 12:09