2016-10-05 1 views
21

あるページから別のページにプッシュしようとするとエラーが発生します。同じページにプッシュしようとすると、そのエラーは発生しません。あるページから別のページにプッシュするときにだけエラーが発生します。 'setRoot()'もエラーを出さない。「コンポーネントファクトリが見つかりません」エラーページ間をプッシュしようとするとき

this.navCtrl.push(Page7); 

私はPage7をapp.module.tsに追加しました。

import { NgModule } from '@angular/core'; 
import { IonicApp, IonicModule } from 'ionic-angular'; 
import { MyApp } from './app.component'; 

import { Page1 } from '../pages/page1/page1'; 
import { Page2 } from '../pages/page2/page2'; 
import { Page3 } from '../pages/page3/page3'; 
import { Page4 } from '../pages/page4/page4'; 
import { Page5 } from '../pages/page5/page5'; 
import { Page6 } from '../pages/page6/page6'; 
import { Page7 } from '../pages/page7/page7'; 

@NgModule({ 
declarations: [ 
MyApp, 
Page1, 
Page2, 
Page3, 
Page4, 
Page5, 
Page6, 
Page7 
], 
imports: [ 
IonicModule.forRoot(MyApp) 
], 
bootstrap: [IonicApp], 
entryComponents: [ 
MyApp, 
Page1, 
Page2, 
Page3, 
Page4, 
Page5, 
Page6, 
Page7 
], 
providers: [] 
}) 

export class AppModule {} 

これはイオン性2アプリケーションです。このエラーが発生します。

EXCEPTION: Error in ./Page6 class Page6 - inline template:21:56 caused by: No component factory found for Page7 

console error

答えて

25

私は解決策を見つけました。プッシュしようとしているページを親ディレクトリに追加する必要があります。それは@NgModuleにも含める必要があります。

import {ApiServices} from '../../providers/api-services'; 
import { Visualizer } from '../Page7/Page7'; 

@Component({ 
    selector: 'page-page6', 
    templateUrl: 'page6.html', 
    providers: [ ApiServices ], 
    entryComponents:[ Page7 ] 
}) 

export class Page6 { 
    tapped(event, id) { 
     this.navCtrl.push(Page7,{ 
     id: id 
     }); 
    } 
}  
+0

具体的には、ページを「entryComponents」リストに追加する必要があります。 Component-デコレータの "entryComponents" - プロパティまたはNgModule-Decorator関連の "entryComponents" -Propertyでこれを行う場合は関係ありません。すべてのページが何らかの形でこのリストに表示されている必要があります。それ以外の場合、angleはこのコンポーネントのファクトリを作成しません。 Ionic-Docs/Angular-Docsはそれについて実際にはっきりしていません。ソースコードを入れても問題はありませんが、大文字のアルファベットは、事前にAoTコンパイルを行う場合には重要な役割を果たします。それには注意してください。 – Nightking

+0

Ionic 2.0.0この問題は修正されました。 –

0

インポート時にエラーがUpperCase文字である可能性があります。それは私の仕事です。

8

exports[]のコンポーネントを@NgModuleに入れましたか?またはentryComponents

@NgModule({ 
    imports: [ 
     MaterialModule.forRoot(), 
    ], 
    exports: [ 
     ConfirmDialog, 
    ], 
    declarations: [ 
     ConfirmDialog, 
    ], 
    providers: [ 
     DialogsService, 
    ], 
    entryComponents: [ 
     ConfirmDialog, 
    ], 
+0

あなたのコードが不完全であるように見えますか?また、質問をした後でコードを提供するので、提供したコードが正確に何をしているかははっきりしません。どうか明らかにしてください。 – YakovL

+0

私はそれをngModuleに入れました。輸出をする必要はありません。デクリメントとエントリーコンポーネントだけを置く必要があります。 –

0

あなたは引用符でそれを入れていないしたいことがあります。

let modal = this.modalCtrl.create("SearchPage") 

の代わりに、(間違った):

let modal = this.modalCtrl.create(SearchPage) 
1

あなたはこのような何かを行うことができます。

以下でhome.module.tsをインポートまたは作成した後、

import { NgModule } from '@angular/core'; 
import { IonicPageModule } from 'ionic-angular'; 
import { HomePage } from './home'; 

@NgModule({ 
    declarations: [ 
    HomePage, 
    ], 
    imports: [ 
    IonicPageModule.forChild(HomePage), 
    ], 
}) 
export class HomePageModule {} 

は、すべてのインポートのページへのリンクを削除します。たとえば、次に

import { HomePage } from '../pages/home/home'; 

は、

rootPage、などのページへのリンクに置き換えます。どんな=ホームページを。 rootPage:any = 'HomePage';

あるいは、

this.navCtrl.push(ホームページ)。this.navCtrl.push( 'HomePage');

つまり、クラス名を一重引用符または二重引用符で囲みます。

関連する問題