Я пытаюсь загрузить несколько файлов из блока *ngFor. Я не могу правильно проанализировать содержимое
Я использую массив для хранения имен файлов, и если я попытаюсь снова выбрать файл, я не смогу получить новое имя файла.
это мой html-код
<div *ngFor = "let data of fileList, let i = index">
<label class = "adpLabel">{{data.fileDesc}}</label>
<input readonly type = "text" value = {{filename[i]}}>
<input type = "file" id = "{{data.fileName}}" name = "{{data.lastUpdateTsFile}}"
#selectFiles hidden accept = ".xls,.xlsx" (change) = "getFileInfo($event, i)">
<button mat-button (click) = "selectFiles.click()" class = "browseBtn">Browse</button>
</div>
это мой файл component.ts
export class appComponent implements OnInit {
fileType : any = [];
filename : any = [];
file : any = [] ;
getFileInfo(event, i) {
this.file.push(event.target.files);
this.fileType.push(event.target.id);
this.fileUploadDate.push(event.target.name);
for (let i = 0; i < this.file.length; i++) {
let fileName = this.file[i][0].name;
let id = this.fileType[i];
let fileDate = this.fileUploadDate[i];
let extension = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
if ( extension= = ".xls" || extension= = ".xlsx" ) {
this.filename[i] = fileName;
this.fileType[i] = id;
}
}
}
}
Я ожидаю просмотреть файл несколько раз, что я не могу сделать сейчас.
должны ли вы поддерживать несколько кнопок просмотра или вы можете поддерживать отдельные кнопки просмотра, а затем иметь возможность выбирать несколько файлов
Согласно требованиям, у нас должно быть несколько кнопок просмотра.
Я ответил на вопрос, попробуйте и дайте мне знать, если у вас возникнут проблемы.
data.fileName неверно, имя файла не из этих данных
функциональность работает нормально, но значение j не обновляется, оно отображается как ноль для каждой итерации @Anusha_Mamidala





измените свой файл ts на
getFileInfo(event, i) {
if (this.file[i]){
this.file.splice(i,1,event.target.files);
this.fileType.splice(i,1,event.target.id);
}
else{
this.file[i]=event.target.files;
this.fileType[i]=event.target.id;
//this.file.push(event.target.files);
//this.fileType.push(event.target.id);
}
for (let j = 0; j < this.file.length; j++) {
let fileName:string='';
let extension:string;
if (event.target.files[j]){
fileName=event.target.files[j].name;
extension = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
}
let id:any;
if (this.fileType[j]){
id=this.fileType[j];
}
if ( extension= = ".xls" || extension= = ".xlsx" ) {
this.filename[i] = fileName;
this.fileType[i] = id;
}
}
}
можете уточнить проблему
Не могли бы вы четко объяснить свой вопрос.... в каком массиве вы хотите хранить и для какой цели вы хотите его использовать.... и почему вам нужно поддерживать 4 разных массива... для имени, типа и все.... !!
Я понял. Я сделал следующее изменение из этого let fileName = event.target.files[i].name; к этому: let fileName = this.file[i][0].name;
теперь это работает. но у меня другая проблема. Предположим, у меня есть 3 кнопки просмотра, и если я сначала выберу 3-ю кнопку просмотра, имя отображается в 1-м текстовом поле, а не в 3-м текстовом поле, связанном с этой кнопкой.
вы можете обратиться к stackblitz, которым я поделился
Да, конечно, плохо и поделиться изменениями
внесены изменения, теперь вы можете идти.
Не могли бы вы обновить свой код в stackblitz