2016-08-24 3 views
1

У меня есть три модуля особенности (в том числе Shared) в моем приложенииУгловая ошибка 2 Multiple декларация

1) CustomerModule 
2) SiteModule 
3) SharedModule 

Оба Customer и Sitemodule импорта sharedmodule и Site module охотно загружается application запуска в то время как customer module настроен быть 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 списке, когда я перейти к customersroute, я получил несколько declarationerror для EditCustomerComponent как в SiteModule, так и CustomerModule.

Я знаю, что это может быть исправить путем перемещения EditCustomerComponent к общему module, но это не то, что я хочу, так как это component больше смысла проживает в customer module.

Another workaround would быть к export в EditCustomerComponent от CustomerModule и then import into SiteModule but что require в CustomerModule не быть lazy loaded который again я do не want.

Мне интересно, есть ли другой хороший способ справиться с этим.

+0

Я не понимаю, почему EditCustomerComponent логически проживает в CustomerModule , но должны существовать как в CustomerModule, так и в SiteModule? Если он существует в обоих случаях, он не логически находится в одном из них. –

+0

@AbdulRahmanAlHamali Позвольте мне понять, что 'EditCustomerComponent' находится в' CustomerModule'. Но этот компонент необходимо использовать как директиву в 'SiteModule'. – user2866746

+0

Что такое сообщение об ошибке? –

ответ

0

Директива (и компонент) может быть указана только в объявлениях одного модуля.

Вы должны двигаться EditCustomerComponent ему собственного NgModule (или просто какой-либо другой с общими директивами), а затем добавить его в imports: [] из CustomerModule и SiteModule`

+0

Мне было интересно, есть ли лучший способ справиться с этим, поскольку я действительно хочу сохранить свой 'EditCustomerComponent 'в' Customer Module'. И не хотите вставлять свой собственный или «общий модуль». – user2866746

+0

Вы можете импортировать 'CustomerModule' в' SiteModule' и обрабатывать 'CustomerModule' как общий модуль. –

+0

Согласитесь, но в то же время я хочу, чтобы мой 'CustomerModule' был ленивым. Один из его «компонентов» необходимо повторно использовать в других модулях приложения. – user2866746

Смежные вопросы