2016-10-17 4 views
1

どのプロジェクトでも使用できるdatepickerコンポーネントを開発しようとしています。Ionic2を拡張してModalControllerを注入する

コンポーネントを持つNgModuleを持っていて、ionic2のすべてのコンポーネント/ディレクティブを使用できるように、IonicModuleを注入します。

@NgModule({ 
    imports: [ 
     CommonModule, 
     IonicModule.forRoot(DatePickerModule) 
    ], 
    exports: [DatePickerComponent, DatePickerDirective], 
    entryComponents: [DatePickerComponent], 
    declarations: [DatePickerComponent, DatePickerDirective], 
    providers: [DateService, nls] 
}) 
export class DatePickerModule { 
    static forRoot(): ModuleWithProviders { 
     return { 
      ngModule: DatePickerModule 
     }; 
    } 
}; 

これらの構成要素のうちの1つは、モーダルを表示するイオンモダルコントローラを注入する。

export class MainDirective{ 
    public static config:any; 
    constructor(private modalCtrl:ModalController) { 
    } 
    openModal() { 
     this.modalCtrl.create(DatePickerComponent 
     ).present(); 
    } 
} 

このNgModuleは別のアプリケーションにインポートされ、そのアプリケーションからopenModalを呼び出そうとしています。 これは私が何が起こることは、それがイオン-角度ライブラリからエラー未定義の「_getPortal」をスローすることです

@NgModule({ 
    imports: [ 
    IonicModule.forRoot(App), 
    DatePickerModule.forRoot(), 
], 
}) 

をインポートする方法です。 私はそれが表示するアプリを見つけることができないと推測しています。

私はforRootにACTUAL APPを渡す必要があると推測していますが、これを行う方法はわかりません。

この問題にアプローチするにはどうすればよいでしょうか?

答えて

0

この解決策は、特定の成分をイオン性で広げて、自分の成分がそれ自身の種類のモダリティであることを示すことでした。

外部コンポーネントにモーダルコントローラを注入するのはあまりにも効率が悪く、コンポーネントがモーダルではないため、私の意見では実行しないでください。

表示されるものについては、ViewControllerは、現在の関数を実行するたびに表示されるベースクラスの型であるため、拡張する必要があります。

プロキシによる現在の機能は、アプリケーション自体がビューコントローラを表示するように指示する現在の機能です。

export class MyComponent extends ViewController 

は、あなたのコンストラクタにして

constructor(private _app:App){} 

をアプリケーションを注入アプリ

への新しいコンポーネントを表示しますので、

はViewControllerをするコンポーネントを拡張して修正する

this.app.present(this); 

モーダルを表示できるようになりました。

1

forRootは、ルートモジュールでのみ呼び出す必要があります。この呼び出しは、一連のアプリケーションプロバイダを設定します。これは、Ionicをブートストラップするときにのみ行う必要があります。代わりにあなたがするべきはIonicModule(no forRoot)をインポートするだけです。

ModalControllerは、IonicModule.forRootをルートモジュールにインポートした時点で既に提供されているため、追加しようとして心配する必要はありません。それを追加したいのであれば可能ですが、ブートストラップ時にのみ利用できるIonic Appに依存しています。だから実際、それを追加しようとすると冗長です。

+0

このプロセスを説明してくれてありがとうございます。私はこれを試して、私はまだngmoduleがモーダルを表示する必要があるアプリのルートを見つけることができない同じ問題に遭遇した。 – misha130

関連する問題