Angular; bileşenler, direktifler veya pipe'lar arasında döngüsel bir bağımlılık tespit etti. Bu hata, A bileşeni B bileşenini import ettiğinde ve B bileşeni (doğrudan veya dolaylı olarak) A bileşenini import ederek bir döngü oluşturduğunda meydana gelir.
Bu döngüsel referans, Angular'ın bileşenleri düzgün şekilde başlatmasını engeller ve şöyle bir hatayla sonuçlanır:
NG0919: Cannot read @Component metadata. This can indicate a runtime circular dependency in your app that needs to be resolved.
Daha eski Angular sürümlerinde, bunun yerine şöyle bir hata görebilirsiniz:
Cannot read properties of undefined (reading 'ɵcmp')
Yaygın Nedenler
Karşılıklı Bileşen Import'ları
En yaygın neden, iki bileşenin birbirini import etmesidir:
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} from '@angular/core';
import {Parent} from './parent';
@Component({
selector: 'app-child',
imports: [Parent],
template: '<app-parent/>',
})
export class Child {}
Dolaylı Döngüsel Referanslar
Döngüsel bağımlılıklar ara dosyalar aracılığıyla da oluşabilir:
ComponentA -> ComponentB -> ComponentC -> ComponentA
Hatayı çözme
Paylaşılan mantığı yeniden düzenleyin
Paylaşılan işlevselliği her iki bileşeni de import etmeyen ayrı bir dosyaya taşıyın:
shared.service.ts
import {Service} from '@angular/core';
@Service()
export class SharedService {
// Paylaşılan mantık burada
}
Yalnızca tür import'ları kullanın
Türlere yalnızca TypeScript için ihtiyacınız varsa, import type kullanın:
import type {Parent} from './parent';
Yalnızca tür import'ları derleme zamanında silinir ve çalışma zamanı döngüsel bağımlılıklarına katkıda bulunmaz.
Bileşen hiyerarşisini yeniden yapılandırın
Döngüsel bağımlılığın bir tasarım sorununa işaret edip etmediğini değerlendirin. Genellikle, paylaşılan işlevselliği üçüncü bir bileşene veya servise çıkarmak en temiz çözümdür.
Karmaşık döngüsel bağımlılıkları ayıklama
Birçok modüle sahip karmaşık uygulamalarda, döngüsel bağımlılıkları manuel olarak tespit etmek zor olabilir. Döngüsel import'ları görselleştirmek ve tespit etmek için madge gibi araçları kullanmayı düşünün:
# madge'i yükleyin
npm install -g madge
# Döngüsel bağımlılıkları kontrol edin
madge --circular --extensions ts ./src
# Görsel bir grafik oluşturun
madge --circular --extensions ts --image graph.svg ./src
Bu araçlar, projeniz genelindeki döngüsel bağımlılık zincirlerini belirlemenize ve görsel bağımlılık grafikleri oluşturmanıza yardımcı olabilir.