2017-03-03 15 views
9

今私は、カスタムパイプiはModule1のとモジュール2にインポートすると異なるモジュールでグローバルにパイプを宣言する方法は?

(i) Module1 
(ii) Module2 

それはそれを言って、エラーを言って、私は2つの異なるモジュールでこれを使用する必要がCurrConvertPipe

import {Pipe, PipeTransform} from '@angular/core'; 
import {LocalStorageService} from './local-storage'; 
@Pipe({name: 'currConvert', pure: false}) 
export class CurrConvertPipe implements PipeTransform { 
    constructor(private currencyStorage: LocalStorageService) {} 

    transform(value: number): number { 
    let inputRate = this.currencyStorage.getCurrencyRate('EUR'); 
    let outputputRate = this.currencyStorage.getCurrencyRate(localStorage.getItem('currency')); 
    return value/inputRate * outputputRate; 
    } 
} 

という名前作成しました上位レベルのモジュールで宣言する必要があります。

は、だから私は、app.module.ts

import './rxjs-extensions'; 
import { NgModule } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { FormsModule } from '@angular/forms'; 
import { AppRoutingModule } from './app-routing.module'; 
import { AppComponent } from './app.component'; 
import { CurrConvertPipe } from './services/currency/currency-pipe'; 
@NgModule({ 
    imports: [ 
     BrowserModule, 
     FormsModule, 
     HttpModule, 
     AppRoutingModule, 
     Module1,   
     Module2 

    ], 

    declarations: [ 
     AppComponent, 
     CurrConvertPipe 
    ], 
    providers: [ 

    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

内で宣言しているが、私はModule1の中でそれを使用する場合、それはパイプ「currConvert」は

答えて

27

角では、一般的な指令、コンポーネント、パイプなどを共有する良い方法は、共有モジュールを使用することです。

これらのモジュールは共通部分を宣言してエクスポートし、他のモジュールで使用できるようにします。

角度のあるドキュメントのfundamentals sectionは、共有モジュールについての非常に良い情報です。

例として、currConvertパイプを考えてみましょう。


  • 宣言新しいNgModuleは
  • あなたのパイプがimportsに動作するために必要とされる任意のモジュールを追加NgModule -decoratorメタデータのdeclarationsexports配列にパイプを追加
  • ApplicationPipesModuleと呼ばれますアレイ

// other imports 
import { CurrConvertPipe } from './{your-path}'; 

@NgModule({ 
    imports: [ 
    // dep modules 
    ], 
    declarations: [ 
    CurrConvertPipe 
    ], 
    exports: [ 
    CurrConvertPipe 
    ] 
}) 
export class ApplicationPipesModule {} 

アプリケーションpipes.module.ts


  • imports配列
にそれを追加することで、あなたのパイプが使用されようとしているモジュールに作成された ApplicationPipesModuleモジュールをインポートします
// other imports 
import { ApplicationPipesModule } from './{your-path}'; 

@NgModule({ 
imports: [ 
    // other dep modules 
    ApplicationPipesModule 
], 
declarations: [], 
exports: [] 
}) 
export class MyModule1 {} 

my-module1.module。TS


// other imports 
import { ApplicationPipesModule } from './{your-path}'; 

@NgModule({ 
imports: [ 
    // other dep modules 
    ApplicationPipesModule 
], 
declarations: [], 
exports: [] 
}) 
export class MyModule2 {} 

私-module2.module.ts

EDIT:改善された回答のテキストおよび例。

4

あなたはモジュールをしなければならないが見つかりませんでしたエラーをスローします、すなわちSharedModuleとあなたのパイプを宣言してください。パイプをSharedModuleにエクスポートし、SharedModuleModule1Module2の両方にインポートする必要があります。 https://angular.io/docs/ts/latest/guide/ngmodule.html#!#shared-module

+0

@Sajeetharan app.module _imports_ 'Module1'と' Module2'ので、pipeは*これらのモジュールでインポートされません。 'SharedModule'を' Module1'にインポートすると、パイプは 'SharedModule'にインポートされ、' Module1'にエクスポートされます。 – Ledzz

関連する問題