В настоящий момент ваша проблема заключается в том, что вы пытаетесь управлять отдельными file
свойствами, используя свойства уровня компонента. Я бы рекомендовал использовать свойства файла для хранения загруженных данных изображения. Все действия затем распространяются на экземпляры file
.
Я упростил примеры кода для целей демонстрации и помог вам увидеть, какой подход я выбрал.
I Я использую свойство для отдельных файлов с именем imageUrl
для хранения URL загруженных данных изображения. Наличие значения в этом свойстве означает, что изображение было загружено. Свойство очищается при удалении изображения.
компонент. html
<div *ngFor="let file of files">
<h5>{{file.title}}</h5>
<label *ngIf="!file.imageUrl">
<input type="file" (change)="addFile(file, $event)" />
Ajouter votre photo
</label>
<ng-container *ngIf="file.imageUrl">
<img [src]="file.imageUrl" />
<button (click)="deleteFile(file)">Supprimer</button>
</ng-container>
</div>
Все действия теперь выполняются над отдельными file
объектами, и должны быть переданы в обработчики событий. В качестве альтернативы вы можете использовать индекс массива вместо ссылки на объект.
Существует также некоторая путаница между экземплярами file
и файлом, загруженным из входных данных. Я бы порекомендовал переименовать переменные files
и file
во что-то другое, если это возможно, и зарезервировать file
на случай, если вы имеете дело с вводом файла.
component.ts
addFile(file, event) {
const uploaded = event.target.files[0];
if (!uploaded) {
return;
}
const reader = new FileReader();
reader.onload = () => {
file.imageUrl = reader.result;
};
reader.readAsDataURL(uploaded);
}
deleteFile(file) {
file.imageUrl = '';
}
DEMO: https://stackblitz.com/edit/angular-bcgwrq