Проекты Angular Parent и Child - Поставщики - PullRequest
0 голосов
/ 13 мая 2019

Я следовал примеру создания некоторых родительских и дочерних проектов отсюда: 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, но я получаю тот же результат.какие-либо подсказки о том, как этого добиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...