我的应用程序中有三个功能模块(包括共享)
1) CustomerModule
2) SiteModule
3) SharedModule
Customer
和Site
module
导入shared
module
和Site module
在application
启动时急切加载customer module
1}}配置为lazy load
。
这里我的代码看起来像
app.routing.ts
const appRoutes: Routes = [
{
path: '',
redirectTo: '/sites',
pathMatch: 'full'
},
{
path: 'customers',
loadChildren: 'app/customers/customers.module'
},
]
export const routing = RouterModule.forRoot(appRoutes);
app.module.ts
@NgModule({
imports:[routing, SiteModule],
declarations:[AppComponent]
bootstrap:[AppComponent]
})
export class AppModule{}
这就是我的功能模块的样子
SiteModule
site.routing.ts
const routes: Routes = [
{ path: 'sites', component: SiteListComponent }
]
export const routing = RouterModule.forChild(routes);
site.module.ts
@NgModule({
imports: [routing, SharedModule],
declarations: [SiteListComponent, EditCustomerComponent]
})
export class SiteModule{}
CustomerModule
customer.routing.ts
const routes: Routes = [
{ path: '', component: CustomerListComponent}
]
export const routing = RouterModule.forChild(routes);
customer.module.ts
@NgModule({
imports: [routing, SharedModule],
declarations: [CustomerListComponent, EditCustomerComponent]
})
export default class CustomerModule{}
SiteModule
和CustomerModule
在EditCustomerComponent
列表中都有declaration
,当我导航到customers
route
时,我得到了多个{{ {}} declaration
和error
中的EditCustomerComponent
1 {}} SiteModule
。
我知道可以通过将CustomerModule
移至共享EditCustomerComponent
来解决此问题,但这不是我想要的,因为module
更有意义地居住在component
。
另一种解决方法是从customer module
导出EditCustomerComponent
,然后导入CustomerModule
,但这需要SiteModule
不再是CustomerModule
不想要。
我想知道是否还有其他好方法可以解决这个问题。
答案 0 :(得分:0)
指令(和组件)只能在一个模块的声明中列出。
您需要将EditCustomerComponent
移至其自己的NgModule
(或任何另一个带有共享指令的内容),然后将其添加到imports: []
CustomerModule
和SiteModule`