2017-05-22 8 views
1

私は、イオン2(角度2)プロジェクトにnpmモジュール "ajv"をインポートしようとしています。 (https://epoberezkin.github.io/ajv/NPMモジュール "はタイプのみを参照しますが、ここで値と​​して使用されています。イオン2 /角度2で

私は、 "NPMが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 

このライブラリをプルするより良い方法はありますか?

+0

あなたはそうです!あなたのコメントを答えに移動したいのであれば、それを正しいとマークし、ノートと一緒にマークします。 – Anthony

+0

私はそれが本当にコメントよりも答えのほうだと思います。投稿し、精緻化。 –

答えて

2

NgModule中のプロバイダの配列は、他の話す中@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サービスとしてラップしてください。ただし、消費量は上記の例とほとんど変わりません。

+0

あなたはそうです。それを動作させるために、私は単に「ajvからimport Ajv」を追加しました;私のプロバイダに。そこから私は "var ajv = new Ajv();"どこでも好きです。私は、 "ajvからのimport Ajv"と " 「ajv」から「import {Ajv}」を選択してください。 https://ionicframework.com/docs/resources/third-party-libs/によると、しかし、私は違いを理解していない。中括弧は私のために働かなかった。ありがとうNeil! – Anthony

+0

@Anthony違いは、 "モジュール"(角括弧で囲まれていないJavaScript)は、シンボルを '{...} 'で使用するために"エクスポート "するか、"デフォルト "のエクスポートを行うことです。したがって、異なる構文は2つの間で異なります。 [import](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/import)のドキュメントを参照してください。 –

関連する問題