Angular — анализ нескольких файлов не работает

Я пытаюсь загрузить несколько файлов из блока *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;

    }

  }
}
  } 

Я ожидаю просмотреть файл несколько раз, что я не могу сделать сейчас.

Не могли бы вы обновить свой код в stackblitz

Anusha_Mamidala 08.04.2019 09:41
stackblitz.com/edit/angular-qbm5vd @Ануша_Мамидала
Danny 08.04.2019 09:59

должны ли вы поддерживать несколько кнопок просмотра или вы можете поддерживать отдельные кнопки просмотра, а затем иметь возможность выбирать несколько файлов

Anusha_Mamidala 08.04.2019 10:20

Согласно требованиям, у нас должно быть несколько кнопок просмотра.

Danny 08.04.2019 10:22

Я ответил на вопрос, попробуйте и дайте мне знать, если у вас возникнут проблемы.

Anusha_Mamidala 08.04.2019 10:59

data.fileName неверно, имя файла не из этих данных

Danny 08.04.2019 11:18

функциональность работает нормально, но значение j не обновляется, оно отображается как ноль для каждой итерации @Anusha_Mamidala

Danny 08.04.2019 13:30
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
7
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

измените свой файл 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;
      }
   }
}

можете уточнить проблему

Anusha_Mamidala 08.04.2019 11:17

Не могли бы вы четко объяснить свой вопрос.... в каком массиве вы хотите хранить и для какой цели вы хотите его использовать.... и почему вам нужно поддерживать 4 разных массива... для имени, типа и все.... !!

Anusha_Mamidala 08.04.2019 11:24

Я понял. Я сделал следующее изменение из этого let fileName = event.target.files[i].name; к этому: let fileName = this.file[i][0].name;

Danny 08.04.2019 11:28

теперь это работает. но у меня другая проблема. Предположим, у меня есть 3 кнопки просмотра, и если я сначала выберу 3-ю кнопку просмотра, имя отображается в 1-м текстовом поле, а не в 3-м текстовом поле, связанном с этой кнопкой.

Danny 08.04.2019 11:31

вы можете обратиться к stackblitz, которым я поделился

Danny 08.04.2019 11:32

Да, конечно, плохо и поделиться изменениями

Anusha_Mamidala 08.04.2019 11:35

внесены изменения, теперь вы можете идти.

Anusha_Mamidala 08.04.2019 11:53

Другие вопросы по теме