Angular компонент экспорта общего модуля, импортированный другим модулем - PullRequest
0 голосов
/ 26 марта 2020

у меня 3 модуля. Позволяет называть их StoreModule, BookModule, PaperModule. Магазин продает книги, поэтому магазин использует книги. Книга состоит из бумаги, поэтому она использует ту же бумагу, что и магазин. И магазин использует бумагу. Здесь возникает проблема! Теперь пример из реальной жизни: angular:

paper.module.ts

import { NgModule } from '@angular/core';
import { PaperComponent } from './paper.component';

@NgModule({
  declarations: [
    PaperComponent
  ],
  exports: [
    PaperComponent
  ]
})
export class PapaerModule { }

Пока все хорошо, ошибок angular нет.

book.module.ts

import { NgModule } from '@angular/core';
import { BookComponent } from './book.component';
import { PaperModule } from './paper.module'

@NgModule({
  declarations: [
    BookComponent
  ],
  imports: [
    PaperModule
  ],
  exports: [
    BookComponent
  ]
})
export class BookModule { }

Здесь book.component.html выглядит так:

<app-paper></app-paper>

Все по-прежнему нормально, ошибок нет , Но когда мы хотим использовать оба (не уверен, что нам понадобятся оба, возможно, нам понадобится только бумага, может быть, тоже книга):

store.module.ts

import { NgModule } from '@angular/core';
import { BookModule } from './book.module'
import { PaperModule } from './paper.module'

@NgModule({
  imports: [
    BookModule,
    PaperModule
  ]
})
export class StoreModule { }

Вот ошибка, которую я получаю:

Ошибка: Uncaught (в обещании): Ошибка: Тип PaperComponent является частью объявлений 2 модулей: BookModule и StoreModule! Пожалуйста, рассмотрите возможность перемещения PaperComponent в модуль более высокого уровня, который импортирует BookModule и StoreModule. Вы также можете создать новый NgModule, который экспортирует и включает PaperComponent, а затем импортировать этот NgModule в BookModule и StoreModule.

Как я могу структурировать это полностью, чтобы экспортировать оба компонента (BookComponent и PaperComponent) чтобы я мог использовать их в другом модуле? Я хочу сделать PaperComponent повторно используемым BookModule и Storemodule тоже. Для какого-то модуля мне нужна только бумага, а для другого мне нужна книга, в которую также входит бумага. Я надеюсь, вы понимаете мою проблему!

1 Ответ

1 голос
/ 26 марта 2020

Я только что выполнил вашу настройку через stackblitz , и это без проблем.

Проверьте ваш код, чтобы убедиться, что BookModule не объявляет PaperComponent.

book.module.ts

import { NgModule } from '@angular/core';
import { BookComponent } from './book.component';
import { PaperModule } from './paper.module';
import { PaperComponent } from './paper.component';

@NgModule({
  declarations: [
    BookComponent,
    // This would be a problem
    PaperComponent
  ],
  imports: [
    PaperModule
  ],
  exports: [
    BookComponent,
  ]
})
export class BookModule { }
...