@Injectable ({предоставляемый в: Модуль}) => Круговая зависимость (МАРШРУТЫ) - PullRequest
1 голос
/ 30 мая 2019
  1. VendasModule импортирует маршрутизатор
  2. , который импортирует родительский компонент
  3. , который импортирует дочерний компонент
  4. , который импортирует SERVICE (я хочу быть @InjectableuredIn: VendasModule)
  5. Импортирует VendasModule (для использования в декораторе @injectable)
  6. Обнаружена циклическая зависимость!

Любые идеи о том, как идтивокруг этого?Мне нужен весь этот импорт, не так ли?

VendasModule:
@NgModule({
  imports: [
    CommonModule,
    RouterModule.forChild(VendasRoutes),
    FlexLayoutModule,
    ReactiveFormsModule,
    MatCardModule,
    MatInputModule,
    MatButtonModule,
    MatProgressBarModule,
    MatRadioModule,
    MatSelectModule,
    MatTabsModule,
    MatDatepickerModule,
    MatTableModule,
    MatCheckboxModule,
    MatDialogModule,
    MatIconModule,
    MatStepperModule,
    MatListModule,
    MatAutocompleteModule,
    SharedModule,
    FormsModule,
    NgxCurrencyModule.forRoot(customCurrencyMaskConfig),
    CustomFormsModule,
    MatExpansionModule,
    MatChipsModule,
    MatTooltipModule,
    MatProgressSpinnerModule,
      ], (...)
VendasRouting:
export const VendasRoutes: Routes = [
    {
        path: '',
        canActivateChild: [Menu],
        children: [
            {
                path: 'cadastro-contrato',
                component: CadastroContratoComponent
            },
            {
                path: 'plano-comercial',
                component: PlanoComercialComponent
            },
            {
                path: 'check-list',
                component: CheckListComponent
            },
            {
                path: 'plano-emissoras',
                component: PlanoEmissorasComponent((FATHER COMPONENT))
            }

        ]
    }
]
Father Component:
export class PlanoEmissorasComponent implements OnInit, OnDestroy { 
  @ViewChild(ProspectEmissorasComponent) prospectEmissoras: ProspectEmissorasComponent; ((Child Component))
  @ViewChild(NegociacaoEmissorasComponent) negociacaoEmissoras: NegociacaoEmissorasComponent;
  @ViewChild(FinancEmissorasComponent) financEmissoras: FinancEmissorasComponent;
  @ViewChild(ContratoEmissorasComponent) contratoEmissoras: ContratoEmissorasComponent;
Service:
import { VendasModule } from "../../../vendas.module";

@Injectable({
    providedIn: VendasModule
})
export class PlanoEmissorasService { ... }

Я получаю эту ошибку:

WARNING in Circular dependency detected:
src/app/vendas/vendas.routing.ts -> src/app/vendas/cadastro-contrato/plano-emissoras/plano-emissoras.component.ts -> src/app/vendas/cadastro-contrato/plano-emissoras/prospect-emissoras/prospect-emissoras.component.ts -> src/app/vendas/cadastro-contrato/plano-emissoras/services/plano-emissoras.service.ts -> src/app/vendas/vendas.module.ts -> src/app/vendas/vendas.routing.ts

1 Ответ

2 голосов
/ 30 мая 2019

Циклическая ссылка в вашем коде генерируется компилятором TypeScript, когда он пытается разрешить циклический импорт. Вы можете следовать любому из следующих решений:

  1. Использование providers массива VendasModule для Предоставление вашего сервиса.

  2. сделать сервис injectable на корневом уровне: @Injectable({ providedIn: 'root' }), который поможет с тряской деревьев.

  3. Используйте providedIn в другом модуле и импортируйте его в VendasModule

     @Injectable({ providedIn: SomeModule})
     export class PlanoEmissorasService {}
    

    Используйте этот модуль в вашем VendasModule

     @NgModule({ imports: [SomeModule]})
     export class VendasModule
    

Проверьте этот комментарий на угловом репо.

...