Hata Ansiklopedisi

Import Döngüsü Tespit Edildi

Bu bileşen tarafından referans verilen bir bileşen, direktif veya pipe, derleyicinin bir import döngüsüne yol açacak bir import eklemesini gerektirecektir. Örneğin, bir Parent'ın şablonunda bir Child'a referans verdiği bir senaryo düşünün:

parent.ts

import {Component} from '@angular/core';
import {Child} from './child';

@Component({
  selector: 'app-parent',
  imports: [Child],
  template: '<app-child/>',
})
export class Parent {}

child.ts

import {Component, inject} from '@angular/core';
import {Parent} from './parent';

@Component({
  selector: 'app-child',
  template: 'The child!',
})
export class Child {
  private parent = inject(Parent);
}

Child constructor'ında Parent'a referans verdiğinden, child.ts'den parent.ts'e zaten bir import vardır. HELPFUL: Üst bileşenin şablonu <child></child> içerir. Bu şablon için oluşturulan kodun bu nedenle Child sınıfına bir referans içermesi gerekir. Bu referansı oluşturmak için, derleyicinin parent.ts'den child.ts'e bir import eklemesi gerekecektir ve bu da bir import döngüsüne neden olacaktır:

parent.ts -> child.ts -> parent.ts

Uzak Kapsam Belirleme

NgModule'ler kullanıyorsanız, döngü oluşturan import'ların eklenmesini önlemek için, bağımlılıkları bağlayan bileşenin tanımlandığı NgModule sınıfına ek kod eklenir.

Bu "uzak kapsam belirleme" olarak bilinir.

Kütüphaneler

Ne yazık ki, "uzak kapsam belirleme" kodu yan etkilidir -- bu da tree shaking'i engeller -- ve kütüphanelerde kullanılamaz. Bu nedenle "compilationMode": "partial" ayarıyla kütüphaneler oluştururken, döngüsel bir import gerektirecek herhangi bir bileşen bu NG3003 derleyici hatasının fırlatılmasına neden olacaktır.

Hatayı ayıklama

Oluşturulacak döngü hata mesajının bir parçası olarak gösterilir. Örneğin:

The component Child is used in the template but importing it would create a cycle:
/parent.ts -> /child.ts -> /parent.ts

Referans verilen bileşenin, pipe'ın veya direktifin derlenen bileşene nasıl geri bağımlı olduğunu belirlemek için bunu kullanın. Sorunu çözmek için bazı fikirler:

  • Döngüyü önlemek için bağımlılıklarınızı yeniden düzenlemeyi deneyin. Örneğin, bir import döngüsüne neden olmadan her iki bağımlı dosyaya da import edilebilecek bağımsız bir dosyada saklanan ara bir arayüz kullanarak.
  • Birbirine referans veren sınıfları aynı dosyaya taşıyarak aralarındaki import'ları ortadan kaldırın.
  • Import edilen tanımlamalar yalnızca tür olarak kullanılıyorsa, import ifadelerini yalnızca tür import'larına (import type sözdizimi kullanarak) dönüştürün, çünkü yalnızca tür import'ları döngülere katkıda bulunmaz.