Bu tanılama, @for bloklarında bir track fonksiyonunun çağrılmadığı durumları tespit eder.
import {Component} from '@angular/core';
@Component({
template: `@for (item of items; track trackByName) {}`,
})
class Items {
protected trackByName(item) {
return item.name;
}
}
Bunda ne yanlış?
@for blokları, yinelenebilir koleksiyondaki öğeler yeniden sıralandığında, yeni öğeler eklendiğinde veya mevcut öğeler kaldırıldığında DOM güncellemelerini doğru şekilde gerçekleştirmek için yinelenebilir koleksiyondaki öğeleri benzersiz şekilde tanımlaması gerekir.
Fonksiyonu çağırmadığınızda, uzlaştırma algoritması öğeleri karşılaştırmak için döndürülen değer yerine fonksiyon referansını kullanır.
Bunun yerine ne yapmalıyım?
Döngünün öğeleri benzersiz şekilde tanımlayabilmesi için bir @for bloğunda kullandığınızda track fonksiyonunu çağırdığınızdan emin olun.
import {Component} from '@angular/core';
@Component({
template: `@for (item of items; track trackByName(item)) {}`,
})
class Items {
protected trackByName(item) {
return item.name;
}
}
Yapılandırma gereksinimleri
Herhangi bir genişletilmiş tanılamanın verilmesi için strictTemplates etkinleştirilmelidir.
uninvokedTrackFunction, strictTemplates dışında ek bir gereksinime sahip değildir.
Bunu önleyemezsem ne olur?
Bu tanılama, projenin tsconfig.json dosyası düzenlenerek devre dışı bırakılabilir:
{
"angularCompilerOptions": {
"extendedDiagnostics": {
"checks": {
"uninvokedTrackFunction": "suppress"
}
}
}
}
Daha fazla bilgi için genişletilmiş tanılama yapılandırması bölümüne bakın.