Angular 2多重声明错误

时间:2016-08-24 18:48:21

标签: angular lazy-loading

我的应用程序中有三个功能模块(包括共享)

1) CustomerModule
2) SiteModule
3) SharedModule

CustomerSite module导入shared moduleSite moduleapplication启动时急切加载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{}

SiteModuleCustomerModuleEditCustomerComponent列表中都有declaration,当我导航到customers route时,我得到了多个{{ {}} declarationerror中的EditCustomerComponent 1 {}} SiteModule

我知道可以通过将CustomerModule移至共享EditCustomerComponent来解决此问题,但这不是我想要的,因为module更有意义地居住在component

另一种解决方法是从customer module导出EditCustomerComponent,然后导入CustomerModule,但这需要SiteModule不再是CustomerModule不想要。

我想知道是否还有其他好方法可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

指令(和组件)只能在一个模块的声明中列出。

您需要将EditCustomerComponent移至其自己的NgModule(或任何另一个带有共享指令的内容),然后将其添加到imports: [] CustomerModule和SiteModule`