単純なコンポーネントを作成して、ページに含めたいと思いました。 ionic g component my-header
(ionic-cli v3 beta)で作成し、IonicPageModuleのバグを修正してから、別のページに追加しました。その後、このエラーが発生します:
Error: Uncaught (in promise): Error: Template parse errors:
'my-header' is not a known element:
1. If 'my-header' is an Angular component, then verify that it is part of this module.
2. If 'my-header' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
「MyHeaderComponent」が@NgModule宣言に自動的に追加されました。
ご協力いただきありがとうございます。
編集:
コンポーネントはcomponents
フォルダー内にあります。
components/my-header/my-header.html
<div>
{{text}}
</div>
components/my-header/my-header.module.ts
import { NgModule } from '@angular/core';
import { IonicModule } from 'ionic-angular';
import { MyHeaderComponent } from './my-header';
@NgModule({
declarations: [
MyHeaderComponent,
],
imports: [
IonicModule,
],
exports: [
MyHeaderComponent
],
entryComponents:[
MyHeaderComponent
]
})
export class MyHeaderComponentModule {}
components/my-header/my-header.scss
my-header {}
components/my-header/my-header.ts
import { Component } from '@angular/core';
@Component({
selector: 'my-header',
templateUrl: 'my-header.html'
})
export class MyHeaderComponent {
text: string;
constructor() {
console.log('Hello MyHeaderComponent Component');
this.text = 'Hello World';
}
}
app/app.module.ts
/* imports */
import { MyHeaderComponent } from '../components/my-header/my-header';
@NgModule({
declarations: [
MyApp,
MyHeaderComponent
],
...
pages/home/home.html
MyHeaderComponent
をngModuleにインポートする必要はありません。
これを使用するページモジュールでMyHeaderComponentModule
をインポートする必要があります。
imports: [
MyHeaderComponentModule,
],
ionic 3は遅延読み込みをサポートしているため、アプリにカスタムコンポーネントをインポートする必要はありません。 module.tsファイル。代わりに、特定のページのmodule.tsファイルにインポートできます。例:ホームページでカスタムコンポーネントを使用する場合は、次のようにhome.module.tsファイルにインポートするだけです。
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { HomePage } from './home';
import { MyHeaderComponent }from '../../components/myheader/myheader';
@NgModule({
declarations: [
HomePage,
MyHeaderComponent
],
imports: [
IonicPageModule.forChild(HomePage),
],
exports: [
HomePage,
]
})
export class HomePageModule {
}
ただし、カスタムコンポーネントの作成時に自動的に追加されるapp.module.tsファイルからインポートと宣言を削除することを忘れないでください。
スレッドに対する最新の回答ですが、別の観点で説明されているこの情報を使用できる人がもっといると確信しています。
Ionicでは、カスタムangularコンポーネントはComponentsModule
と呼ばれる別のモジュールの下に整理されます。最初のコンポーネントがコンポーネントとともにionic generate component
を使用して生成されると、ionicはComponentsModule
を生成します。後続のコンポーネントは同じモジュールに追加されます。
サンプルComponentsModule
は次のとおりです。
import { NgModule } from '@angular/core';
import { CustomAngularComponent } from './custom/custom-angular-component';
import { IonicModule } from 'ionic-angular';
@NgModule({
declarations: [CustomAngularComponent],
imports: [IonicModule],
exports: [CustomAngularComponent],
entryComponents:[
]
})
export class ComponentsModule {}
アプリでComponentsModule
を使用するには、他のangularモジュールと同様に、ComponentsModules
をAppModule
にインポートする必要があります。 ionic generateコンポーネント(v 4.12)はこのステップを追加しないため、手動で追加する必要があります。
AppModuleの抜粋:
@NgModule({
declarations: [
//declaration
],
imports: [
//other modules
ComponentsModule,
],
bootstrap: [IonicApp],
entryComponents: [
//ionic pages
],
providers: [
StatusBar,
SplashScreen,
{provide: ErrorHandler, useClass: IonicErrorHandler},
//other providers
]
})
export class AppModule {}
これが私のモジュールです。あなたの質問に答えるのに役立つことを願っています:
@NgModule({
declarations: [
TestPage
],
imports: [
IonicPageModule.forChild(TestPage),
TranslateModule.forChild(),
PipesModule,
NavigatorComponentModule
],
exports: [
EntriesPage,
],
providers:[
NavigatorComponent
]
})
明確にするために、私は多くのページ(再利用可能なコンポーネント)でカスタムnavigatorComponentを使用しています。
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { TranslateModule } from '@ngx-translate/core';
import { PipesModule } from '../../pipes/PipesModule';
import { NavigatorComponent } from '../../components/navigator/navigator';
import { ComponentsModule } from '../../components/components.module';
import { NavigatorComponentModule } from '../../components/navigator/navigator.module';
@NgModule({
declarations: [
TestPage,
],
imports: [
IonicPageModule.forChild(EntriesPage),
TranslateModule.forChild(),
PipesModule,
NavigatorComponentModule
],
exports: [
TestPage,
],
providers:[
NavigatorComponent
]
})
export class TestPageModule {}
注:navigatorComponentには、ts、css、html、yourcomponentname.module.tsの4つのファイルがあります。 「ionic g component」コマンドは、最後のファイル(yourcomponentname.module.ts)を生成しません。だから私はやった。