Я следовал примеру создания некоторых родительских и дочерних проектов отсюда: https://medium.com/disney-streaming/combining-multiple-angular-applications-into-a-single-one-e87d530d6527
У меня в основном такая же структура, как:
-projects
-child
-src
-app
-app.component.ts
-app.module.ts
...
-assets
...
-src
-app
-app,component.ts
-app.module.ts
...
-assets
...
-angular.json
-package.json
...
Я следовал инструкциями создал общий модуль для дочернего модуля app.module с функцией forRoot примерно так:
const routes: Routes = [
{
path: 'main',
component: MainComponent
},
{
path: 'child',
loadChildren: '../../projects/child/src/app/app.module#ChildSharedModule'
},
{
path: '**',
redirectTo: '/main'
}
];
@NgModule({
imports: [
RouterModule.forRoot(routes),
ChildSharedModule.forRoot()
],
exports: [RouterModule]
})
export class AppRoutingModule { }
Пока все хорошо, маршрутизаторы работают как положено.Теперь я хотел добавить сервис, который будет использоваться среди родительских и всех возможных дочерних проектов, которые будут существовать.Для этого я попытался создать общий модуль в родительском проекте (src/app/shared/shared.module.ts
):
@NgModule({
imports: [
],
providers: [
]
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [
SharedService
]
}
}
}
Обратите внимание, что я добавил SharedService в раздел провайдеров в forRoot.После этого я добавил SharedModule.forRoot () в родительский app.module.ts:
@NgModule({
declarations: [
AppComponent,
MainComponent
],
imports: [
SharedModule.forRoot(),
AppRoutingModule
],
bootstrap: [AppComponent]
})
export class AppModule { }
, а также добавил SharedModule в дочерний app.module.ts:
@NgModule({
declarations: [
AppComponent,
ChildComponent
],
imports: [
SharedModule,
AppRoutingModule
],
bootstrap: [AppComponent]
})
export class AppModule { }
@NgModule({})
export class ChildSharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: AppModule,
providers: [
]
}
}
}
Я попытался использовать SharedService в компоненте дочернего проекта, и у меня не возникло проблем с компиляцией, но я получаю это при запуске родительского приложения:
compiler.js:1016 Uncaught Error: Can't resolve all parameters for ChildComponent: (?).
at syntaxError (compiler.js:1016)
at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getDependenciesMetadata (compiler.js:10917)
at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getTypeMetadata (compiler.js:10810)
at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver.getNonNormalizedDirectiveMetadata (compiler.js:10429)
at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getEntryComponentMetadata (compiler.js:11013)
at compiler.js:11004
at Array.forEach (<anonymous>)
at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getEntryComponentsFromProvider (compiler.js:11003)
at compiler.js:10976
at Array.forEach (<anonymous>)
Я также попытался пропустить создание SharedModule идобавил provideIn: 'root'
в SharedService, но я получаю тот же результат.какие-либо подсказки о том, как этого добиться?