Эта диагностика обнаруживает случаи, когда функция track не вызывается в блоках @for.
import { Component } from '@angular/core';
@Component({
template: `@for (item of items; track trackByName) {}`,
})
class Items {
protected trackByName(item) {
return item.name;
}
}
В чем проблема?
Блокам @for необходимо уникально идентифицировать элементы в итерируемом объекте для корректного выполнения обновлений
DOM при переупорядочивании элементов, добавлении новых или удалении существующих.
Если вы не вызываете функцию, алгоритм согласования (reconciliation algorithm) будет использовать ссылку на функцию
вместо возвращаемого значения для сравнения элементов.
Что следует сделать?
Убедитесь, что вы вызываете функцию track при использовании её в блоке @for, чтобы выполнить функцию и позволить
циклу уникально идентифицировать элементы.
import { Component } from '@angular/core';
@Component({
template: `@for (item of items; track trackByName(item)) {}`,
})
class Items {
protected trackByName(item) {
return item.name;
}
}
Требования к конфигурации
Для работы любой расширенной диагностики необходимо включить
strictTemplates.
У uninvokedTrackFunction нет дополнительных требований, кроме strictTemplates.
Что делать, если этого нельзя избежать?
Эту диагностику можно отключить, отредактировав файл tsconfig.json проекта:
{
"angularCompilerOptions": {
"extendedDiagnostics": {
"checks": {
"uninvokedTrackFunction": "suppress"
}
}
}
}
См. конфигурацию расширенной диагностики для получения дополнительной информации.