значение перечисления неправильно оценивается в шаблоне Angular 9
App .component.html
<div *ngFor="let file of files">
<p>value : {{file.type}}</p>
<p>bool : {{file.type === FileAccessType.ENTRY_CREATE}}
</div>
app.component.ts
export class AppComponent{
files : FileAccess[];
FileAccessType : FileAccessType;
}
file-access.ts
export interface FileAccess {
path: string;
type: FileAccessType;
timestamp: number;
}
файл-доступ-type.ts
export enum FileAccessType{
ENTRY_CREATE,
ENTRY_DELETE,
ENTRY_MODIFY
}
логическое сравнение в шаблоне работает не так, как ожидалось
{{file.type === FileAccessType.ENTRY_CREATE}} //always gives false
ссылка: stackblitz
2 ответа
В app.component вы должны объявить свою переменную enum следующим образом readonly FileAccessType = FileAccessType;
Компоненты Angular не могут выводить типы как перечисления для уценки HTML.
Итак, как упоминал @Oleksii, вы должны объявить внутреннюю переменную для хранения типа, тогда Angular сможет выполнять оценку из HTML и получать доступ к значениям перечисления.
*.html
<div *ngFor="let file of files">
<p> Value : {{ file.type }} </p>
<p> Bool : {{ file.type === fileType.ENTRY_CREATE }}
</div>
*.ts
export class FilesComponent {
fileType = FileAccessType; // Type assign
files = [...files]; // This is just mocked data
constructor() {}
}
В качестве альтернативы вы можете делегировать ответственность за условие компоненту, например
export class FilesComponent {
files = [...files]; // This is just mocked data
constructor() {}
isCreateType = (file: FileAccess) => file.type === FileAccessType.ENTRY_CREATE;
}
Теперь вам не нужно открывать перечисление в HTML.
<div *ngFor="let file of files">
<p>value : {{ file.type }}</p>
<p>bool : {{ isCreateType(file) }}
</div>