Angular 我可以在组件上使用共享模块提供的服务吗?

Angular 我可以在组件上使用共享模块提供的服务吗?,angular,module,angular-services,shared,angular-components,Angular,Module,Angular Services,Shared,Angular Components,我不知道我想做的是否可能。我已经用forRoot方法在AppModule上导入了SharedModule。然后,我在我需要的通用组件上导入了SharedModule,如下所示: 应用程序模块.ts: > import { BrowserModule } from '@angular/platform-browser'; import { > NgModule } from '@angular/core'; import { SharedModule } from > './sh

我不知道我想做的是否可能。我已经用forRoot方法在AppModule上导入了SharedModule。然后,我在我需要的通用组件上导入了SharedModule,如下所示:

应用程序模块.ts

> import { BrowserModule } from '@angular/platform-browser'; import {
> NgModule } from '@angular/core'; import { SharedModule } from
> './shared/shared.module'; import { HttpClientModule } from
> '@angular/common/http'; import { AppComponent } from
> './app.component'; import { ClinicaComponent } from
> './clinica/clinica.component'; import { ClinicaModule } from
> './clinica/clinica.module'; import { AppRoutingModule } from
> './/app-routing.module'; import { ProfesionalComponent } from
> './profesional/profesional.component'; import { ProfesionalModule }
> from './profesional/profesional.module';
> 
> @NgModule({
>     imports: [
>         BrowserModule,
>         ClinicaModule,
>         ProfesionalModule,
>         SharedModule.forRoot(),
>         AppRoutingModule,
>         HttpClientModule,
>     ],
>     declarations: [
>       ClinicaComponent,
>       AppComponent,
>       ProfesionalComponent
> 
>     ],
>     providers: [],
>     bootstrap: [AppComponent] }) export class AppModule { }
共享的.module.ts

export const GlobalProviders = [ //para los global providers
  {
        provide: AuthServiceConfig,
        useFactory: getAuthServiceConfigs
      },
   AuthenticationService, UserService, AlertService, ProfesionalService, ServiciosService, ClinicService
];
@NgModule({
    imports: [
        CommonModule,
        //SharedRoutingModule,
        FormsModule,
        ReactiveFormsModule,
        SocialLoginModule
    ],
    declarations: [LoginComponent,
       HeaderComponent,
       NotFoundComponent,
       MyfooterComponent,
       RequiredLabelDirective],
    exports: [
        RouterModule,
        HeaderComponent,
        MyfooterComponent,
        RequiredLabelDirective,
        FormsModule,
        ReactiveFormsModule
    ]
})
export class SharedModule {

   static forRoot(): ModuleWithProviders {
        return {
            ngModule: SharedModule,
            providers: [GlobalProviders]
        };
    }
所以,我想使用Professional组件的兄弟组件MisDatoComponent中的GlobalProviders。这是我的专业组件.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { GestionProfesionalesComponent } from './gestion-profesionales/gestion-profesionales.component';
import { MisDatosComponent } from './profile/profile.component';
import { SharedModule } from '../shared/shared.module';

@NgModule({
  imports: [
    CommonModule,
    SharedModule
  ],
  declarations: [ MisDatosComponent, GestionProfesionalesComponent]
})
export class ProfesionalModule { }
这是项目的结构,您可以理解我:


所以我认为,当我在ProfessionalModule中导入sharedModule,以及在ProfileComponent中导入sharedModule时,我可以使用提供sharedModule的服务。但它没有识别它,我必须在ProfileComponent中逐个导入服务。有人能帮我吗?

照字面意思回答你的问题,是的。如果将服务添加到ngModule的提供者阵列,然后让第二个ngModule导入第一个,则第二个ngModule的组件将可以访问第一个ngModule的提供者


文档中的这篇文章有一个很好的解释,包括在不需要时限制提供商共享的方法:

我不想做的是再次导入提供sharedModule的服务,如果我不这样做,它不会识别它们:导入{Servicio,ServiciosService}来自“../../shared/services/servicicios.service”;从“../../shared/shared.module”导入{SharedModule};如果我对服务的导入进行注释,它就不会识别它,例如在ProfileComponent中。我该怎么办?