javascript - 如何在按钮单击时使用 Angular 使用 ng2-file-upload 获取文件值

标签 javascript angular typescript

我在这里使用 ng2-file-upload 创建一个文件上传,我正在删除文件,通常我得到它的值(value)直到现在它很好现在我的问题甚至认为我放置了删除功能但是在删除文件之后我也想使用按钮单击功能检索文件上传值我该如何实现下面是我的代码

注意:这里需要获取fileList的值

目前我正在使用 filedropped 方法获取文件列表值,但是通过使用按钮单击我需要获取值

import { Component } from '@angular/core';
import { FileUploader } from 'ng2-file-upload';


const URL = 'https://evening-anchorage-3159.herokuapp.com/api/';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {

  fileSelectState = {};
  formVisible = true;
  temp: any;

  public showInputForm: boolean = true;
  public selectAll: boolean = true;
  selectedAll: any;


  imga = "http://icons.iconarchive.com/icons/hopstarter/soft-scraps/256/Button-Upload-icon.png";

  public uploader:FileUploader = new FileUploader({url: URL});
  public hasBaseDropZoneOver:boolean = false;
  public hasAnotherDropZoneOver:boolean = false;
  public selectedFilesArray = [];
  private selectedFile;



    public selectFile(e: any): void {
    var target = e.target || e.srcElement || e.currentTarget;
    var value = target.innerHTML;
    this.selectedFile = value;
    this.selectAll = true;
    this.selectedFilesArray = [];
    this.selectedFilesArray.push(this.selectedFile);

  }
  public fileOverBase(e: any): void {
    this.hasBaseDropZoneOver = e;
  }

    public selectAllFiles(e: any): void {

    this.selectedFilesArray = [];
    if (e.target.checked) {

      this.selectAll = true;

      for (var item in this.uploader.queue) {
        this.selectedFilesArray.push(this.uploader.queue[item].file.name);
      }
    }

    for (var item in this.uploader.queue) {
      this.fileSelectState[this.uploader.queue[item].file.name] = e.target.checked
    }


  }
 public fileDropped(fileList: any): void
  {
    for(var i =0 ; i< fileList.length; i++){
        this.fileSelectState[fileList[i].name] = true;
    }

  }

   public fileChecked(e: any): void {
    if (e.target.checked) {
      console.log(this.selectedFilesArray);
      this.selectedFilesArray.push(e.target.value);
      if (this.selectedFilesArray.length > 1) {

        this.selectedFile = e.target.value;


      }
      else {

        this.selectedFile = e.target.value;


      }

    }
    if (!e.target.checked) {

      var index = this.selectedFilesArray.indexOf(e.target.value, 0);
      if (index > -1) {
        this.selectedFilesArray.splice(index, 1);
        if (this.selectedFilesArray.length > 1) {


          this.selectedFile = this.selectedFilesArray[0];


        }
        else if (this.selectedFilesArray.length == 1) {

          this.selectAll = false;
          this.selectedFile = this.selectedFilesArray[0];


        }
        else if (this.selectedFilesArray.length == 0) {

          this.selectedFile = '';


        }
      }

    }



  }

  getInfo(){
    console.log('file info');
  }

}

网址:https://stackblitz.com/edit/angular-s6g1v6

like first log the file list has to be displayed

最佳答案

编辑:OP 希望 File 对象在组件范围内可用。代码修改如下。

存储整个File对象而不仅仅是它的名称属性。首先,将 Change the fileSelectState 更改为数组(或为此使用不同的类成员)。然后将 fileDropped() 方法更改为:

public fileDropped(fileList: any): void
  {
    for(var i =0 ; i< fileList.length; i++){
        this.fileSelectState.push(fileList[i]);
    }

  }

注意:如果你不必支持IE,你可以将for循环替换为:

this.fileSelectState = Array.from(fileList);

改变:

getInfo(){
  console.log('file info');
}

收件人:

getInfo(){
  console.log(this.fileSelectState);
}

无论你在哪里需要文件名,然后使用这个:

this.fileSelectState[0].name

关于javascript - 如何在按钮单击时使用 Angular 使用 ng2-file-upload 获取文件值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55198596/

相关文章:

typescript - Angular2 View 模型中的 bool 值不更新 *ngIf 模板

javascript - 如何确定 JavaScript 中 HTML 元素的类型?

带有 1++ 参数的 JavaScript 递归

angular - 拖动元素时是否禁用了 mousemove 事件?

arrays - 生成一个在 Angular 2 中不重复的数组

typescript - tsc 编译使用文件扩展名导入的 typescript

位置保持不变的 Javascript 或 CSS 静态栏

javascript - 立即加载网页而不是分段加载

javascript - Angularfire2 错误 "Property ' downloadURL 在类型 'AngularFireUploadTask' 上不存在。”

node.js - 无法从 TypeScript 反射系统推断 GraphQL 类型