Ionic 4 с использованием компонентов на нескольких страницах

Начиная с чистого проекта ionic 4 (с использованием ionic start --type=angular и пустого шаблона), я пытаюсь создать собственный угловой компонент, который можно использовать на нескольких страницах.

Однако, если я использую ionic generate component и пытаюсь использовать сгенерированный компонент тестовое задание в homepage.html, вставляя <app-test></app-test>, я получаю сообщение об ошибке:

core.js:1673 ERROR Error: Uncaught (in promise): Error: Template parse errors:

app-test - неизвестный элемент: 1. Если app-test является компонентом Angular, убедитесь, что он является частью этого модуля. 2. Если «app-test» является веб-компонентом, добавьте «CUSTOM_ELEMENTS_SCHEMA» к «@ NgModule.schemas» этого компонента, чтобы подавить это сообщение. ("=" _ blank "rel =" noopener "href =" https://ionicframework.com/docs "> документы будут вашим руководством.

ERROR Error: Uncaught (in promise): Error: Template parse errors: 'app-test' is not a known element: 1. If 'app-test' is an Angular component, then verify that it is part of this module. 2. If 'app-test' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message. ("="_blank" rel="noopener" href="https://ionicframework.com/docs">docs will be your guide.

Вот как выглядят мои файлы: app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';

import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { TestComponent } from './test/test.component';

@NgModule({
  declarations: [AppComponent, TestComponent],
  entryComponents: [],
  imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
  providers: [
    StatusBar,
    SplashScreen,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

app-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

const routes: Routes = [
  { path: '', redirectTo: 'home', pathMatch: 'full' },
  { path: 'home', loadChildren: './home/home.module#HomePageModule' },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

test.component.ts

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-test',
  templateUrl: './test.component.html',
  styleUrls: ['./test.component.scss']
})
export class TestComponent implements OnInit {

  constructor() { }

  ngOnInit() {
  }

}

home.page.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {

}

home.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { IonicModule } from '@ionic/angular';
import { FormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';

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

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    IonicModule,
    RouterModule.forChild([
      {
        path: '',
        component: HomePage
      }
    ])
  ],
  declarations: [HomePage]
})
export class HomePageModule {}

home.page.html

<ion-header>
  <ion-toolbar>
    <ion-title>
      Ionic Blank
    </ion-title>
  </ion-toolbar>
</ion-header>

<ion-content padding>
  The world is your oyster.
  <p>If you get lost, the <a target="_blank" rel="noopener" href="https://ionicframework.com/docs">docs</a> will be your guide.</p>

  <app-test></app-test>
</ion-content>

И структура папок в виде изображения

К настоящему времени я опробовал несколько вещей, и одна из найденных мной работ - это создание файла src / app / shared.module.ts, объявление и экспорт TestComponent туда, а затем импорт SharedModule на каждой странице, на которой я хочу использовать компонент.

Однако я чувствую, что эта работа не идеальна, и мне не хватает чего-то, как сделать ее чище. Любые идеи?

2
0
7 181
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обходной путь для вашего общего модуля на самом деле является хорошей практикой в ​​angular, и вы должны придерживаться этого.

Для справки: https://angular.io/guide/sharing-ngmodules

Другие вопросы по теме