私がする時:
_ionic generate component my-component
_
このフォルダ構造が作成されました:
_components
my-component
my-component.ts
my-component.scss
my-component.html
components.module.ts
_
このコンポーネントをページで使用したい。 Ionic 3で新しい遅延読み込みメカニズムを使用するつもりはありませんが、使用してもかまいません。最も簡単に機能するものは何でも、コンポーネントを使用したいだけです。ちなみに、私のページにはそれ自体のモジュールはありません。これはページのフォルダー構造です。
_pages
somepage
somepage.ts
somepage.scss
somepage.html
_
次にコンポーネントに戻ります。テンプレートでカスタムionicコンポーネント(イオングリッド)を使用します。したがって、_my-component.html
_は次のようになります。
_<ion-grid></ion-grid>
_
その行はVSコードで赤で強調表示されます。エラーは次のようになります。
_'ion-grid' is not a known element:
1. If 'ion-grid' is an Angular component, then verify that it is part of this module.
2. If 'ion-grid' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
_
これは、IonicModule
とCommonModule
を_components.module.ts
_に追加することにより、100件の投稿と質問に従って解決する必要があります。
_@NgModule({
declarations: [MyComponent],
imports: [
CommonModule ,
IonicModule
],
exports: [MyComponent]
})
export class ComponentsModule {}
_
しかし、もちろんこれはエラーを解決しません。
2番目の問題は、ページが新しいカスタム要素を認識しないことです。 _somepage.html
_のこの行:
_<my-component></my-component>
_
同様に赤で強調表示され、このエラーが表示されます:
_'my-component' is not a known element:
1. If 'my-component' is an Angular component, then verify that it is part of this module.
2. If 'my-component' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
_
最初はComponentsモジュールを_app.module.ts
_に追加しなければなりませんでした:
_@NgModule({
declarations: [
MyApp,
SomePage
],
imports: [
...
ComponentsModule
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
SomePage
],
providers: [...]
})
export class AppModule {}
_
しかし、これは何も解決しませんでした。大量の投稿を2時間読んだ後、私は恐ろしい_components.module.ts
_が遅延読み込み用であることを理解し、ページのモジュールを追加する必要があるため、あきらめて、コンポーネントを直接_app.module.ts
_:
_@NgModule({
declarations: [
MyApp,
SomePage,
MyComponent
],
imports: [
...
MyComponent
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
SomePage
],
providers: [...]
})
export class AppModule {}
_
他の組み合わせも試しましたが、何もうまくいきませんでした。神々のために、これはAngularで行うのが最も簡単なことであり、Ionicも同様に簡単でした。2. Angularでコンポーネントを使用するには、いったい何をする必要がありますか3?
ようやく両方の問題を解決しました。
問題#1:アプリがコンポーネントを認識できるようにする方法:
components.module.ts
を削除します。次にコンポーネントを生成するときは、ionicがこのファイルを再度作成しないようにするフラグを使用します。
ionic generate component mycomponent --no-module
コンポーネントを手動でapp.module.ts
に追加します。declarations
の内側のみ:
@NgModule({
declarations: [
MyApp,
SomePage,
MyComponent
],
...
})
export class AppModule {}
問題#2:使用方法Ionicコンポーネントテンプレート内のコンポーネント:
特別なことをする必要はありません。それらを使用してください。コンポーネントをapp.module.ts
に追加する前にいくつかのエラーが発生しましたが、Visual Studio Codeは[問題]タブからエラーを削除していませんでした。しかし、アプリは機能しました。 VS Codeを再起動したところ、エラーは表示されなくなりました。どうやらこれはVS Codeの既知の問題で、古いエラーを取り除くために再起動する必要があるようです。
component.module.tsファイルを削除して、コンポーネントをapp.module.tsにインポートするだけです。
import { CircularTabs } from "../components/circular-tabs/circular-tabs";
@NgModule({
declarations: [
MyApp,
.
.
CircularTabs
]
このコンポーネントを使用するページに、次のように@ ViewChildを追加します
import { CircularTabs } from "../../components/circular-tabs/circular-tabs";
export class MainPage {
@ViewChild("myTabs") myTabs: Tabs;
@ViewChild("myCircularTabs") circularTabs: CircularTabs;
それでおしまい!コンポーネントが機能します。うまくいけば、それはあなたを助けます。
app.module.ts
にComponentsModule
をインポートするだけです
...
import { ComponentsModule } from '../components/components.module';
...
@NgModule({
declarations: [
MyApp,
...
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp),
ComponentsModule
...
],
...
以下のファイルのように、「somepage.module.ts」と呼ばれる、pages/somepage内に新しいファイルを作成する必要があります。
import { NgModule } from '@angular/core';
import { ComponentsModule } from '../../components/components.module';
@NgModule({
declarations: [
],
imports: [
ComponentsModule
],
})
export class SomePageModule {}`