Добавьте компоненты на несколько страниц. Ошибка | Ионный 4

Я пытаюсь добавить на несколько страниц мои компоненты заголовка (компонент Ionic g).

В моем компоненте Header есть 4 файла: html, scss, spec.ts и ts. Когда я добавляю этот компонент минимум на 2 страницы, я получаю эту ошибку:

Error: Type HeaderComponent is part of the declarations of 2 modules: Tab1PageModule and ProductPageModule! Please consider moving HeaderComponent to a higher module that imports Tab1PageModule and ProductPageModule. You can also create a new NgModule that exports and includes HeaderComponent then import that NgModule in Tab1PageModule and ProductPageModule.

Его мой компонент выглядит так:

import { HeaderComponent } from './../../partials/header/header.component';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';

import { IonicModule } from '@ionic/angular';

import { ProductPage } from './product.page';

const routes: Routes = [
  {
    path: '',
    component: ProductPage
  }
];

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    IonicModule,
    RouterModule.forChild(routes)
  ],

  entryComponents:[HeaderComponent],
  declarations: [ProductPage,HeaderComponent]
})
export class ProductPageModule {}

Я также пробую несколько способов добавить этот компонент, но я все еще остаюсь на той же точке. Когда я добавляю NgModule к компоненту, я получаю сообщение об ошибке о директивах (не распознается). При добавлении ComoneModule (из библиотеки Ionic) мои компоненты отображаются на всех страницах, но два способа привязки не работают должным образом (не обновляются);

буду очень благодарен за помощь

РЕДАКТИРОВАТЬ Я пытаюсь создать общую модель (Header.components.module.ts), но когда я использую общий модуль, я получаю сообщение об ошибке:

core.js:15724 ERROR Error: Uncaught (in promise): Error: Template parse errors:
Can't bind to 'ngIf' since it isn't a known property of 'ion-buttons'.
import { HeaderComponent } from './header.component';
import { NgModule,CUSTOM_ELEMENTS_SCHEMA  } from '@angular/core';
import { IonicModule } from '@ionic/angular';
import { RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
@NgModule({

    imports: [CommonModule,
        FormsModule,
        IonicModule,RouterModule],        
    declarations: [
        HeaderComponent,

   ],
   exports: [
    HeaderComponent
   ],
   schemas: [
    CUSTOM_ELEMENTS_SCHEMA
  ]
})

export class HeaderComponentsModule {}


как ясно говорит ошибка: удалить HeaderComponent из любого

Prashant Pimpale 31.05.2019 09:37

Хорошо, Прашант Пимпале, но скажите мне, как добавить переход на все страницы - я должен импортировать или объявить эти компоненты

kogutu 31.05.2019 09:43
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
2
102
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

При объявлении компонента он должен быть объявлен только в одном модуле. Если вы хотите использовать его повторно, вам следует использовать импортировать указанный модуль в другой модуль.

Вы можете создать общий модуль, который содержит:

imports: [MySharedComponent],
exports: [MySharedComponent]

И в Tab1PageModule, и в ProductPageModule:

imports: [MySharedModule]

Хорошо, я пробовал так, но потом получаю ошибку: ERROR Error: Uncaught (in promise): Error: Template parse errors: Can't bind to 'ngIf' since it isn't a known property of 'ion-buttons'...

kogutu 31.05.2019 09:41

@kogutu Я не сказал очевидного, но вы должны импортировать необходимые модули ... CommonModule для структурных директив.

user4676340 31.05.2019 09:43

Хорошо, я решаю проблему, я забыл добавить «CUSTOM_ELEMENTS_SCHEMA», и я должен добавить RouterModule, потому что routerlink не работает. Но теперь мне интересно, почему привязка двух данных не работает. Когда я использовал декларацию для импорта компонентов, все было в порядке.

kogutu 31.05.2019 10:00

Двусторонняя привязка @kogutu - это FormsModule, опять же очевидно, но когда я говорил об «очевидном» в своем предыдущем комментарии, я думал, что вы поняли ...

user4676340 31.05.2019 10:01

@kogutu Тогда, пожалуйста, укажите минимальный воспроизводимый пример вашей проблемы, потому что только с этим кодом я не могу вам сказать!

user4676340 31.05.2019 10:04

Вы выиграли :) Я простой урок - при добавлении компонента ionic g нам нужно добавить необходимую библиотеку для импорта, которую мы хотим использовать (в этом примере: routerModule и formModule), а при использовании директив ionic нам нужно добавить CUSTOM_ELEMENTS_SCHEMA

kogutu 31.05.2019 10:10

@kogutu, поскольку вы используете Ionic 4, теперь он использует веб-компоненты, поэтому каждый раз, когда вы добавляете ion-что угодно, вам также нужно импортировать IonicModule.

Sergey Rudenko 31.05.2019 22:58

Самый простой способ решить эту проблему — создать файл module.ts для Headercomponent и добавить его в массив импорта.

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { IonicModule } from '@ionic/angular';
import { HeaderComponent } from './header.component';

@NgModule({
  imports: [CommonModule, IonicModule],
  declarations: [HeaderComponent ],
  exports: [HeaderComponent ]
})
export class HeaderComponentModule{}

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