0

我有 3 个模块。让我们称他们为StoreModule, BookModule, PaperModule. 商店卖书,所以商店用书。书由纸组成,因此使用纸张,与商店使用的纸张完全相同。商店也使用纸张。问题来了!现在这个角度的现实生活示例:

paper.module.ts

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

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

到目前为止一切顺利,没有角度错误。

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 { }

这是我得到的错误:

错误:未捕获(承诺中):错误:PaperComponent 类型是 2 个模块声明的一部分:BookModule 和 StoreModule!请考虑将 PaperComponent 移至导入 BookModule 和 StoreModule 的更高模块。您还可以创建一个新的 NgModule,它导出并包含 PaperComponent,然后将该 NgModule 导入 BookModule 和 StoreModule。

为了导出两个组件(BookComponent 和 PaperComponent),我怎么能一直构建它,以便我可以在其他模块中使用它们?我也想让 BookModule 和 Storemodule 可以重用 PaperComponent。对于某些模块,我只需要纸张,但对于其他一些模块,我还需要包含纸张的书。我希望你能理解我的问题!

4

1 回答 1

1

我刚刚通过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 { }
于 2020-03-26T15:22:23.363 回答