Angular2文件输入onchange

Posted

技术标签:

【中文标题】Angular2文件输入onchange【英文标题】:Angular2 file input onchange 【发布时间】:2016-11-23 09:33:34 【问题描述】:

我有输入文件(没有提交 - 典型的输入文件)。我想在选择文件时调用一些函数。

示例: 我点击“选择文件”-> 选择文件-> 现在系统检测到更改并调用一些函数来打印所有这些文件信息(例如图像名称)。

我不能在输入文件上使用 ngModel,对吧?该怎么做?

【问题讨论】:

【参考方案1】:

这是我对 Double H 的答案的修正,即不依赖 jQuery 并阻止 webpack 在 e.target.result 上出错。

<img [src]="imageSrc"  />
<input type="file" capture="camera" accept="image/*" (change)="displayPhoto($event)">

打字稿代码

displayPhoto(fileInput) 
  if (fileInput.target.files && fileInput.target.files[0]) 
  const reader = new FileReader();

  reader.onload = ((e) => 
    this.imageSrc = e.target['result'];
  );

  reader.readAsDataURL(fileInput.target.files[0]);

【讨论】:

【参考方案2】:

在我添加 onclick="this.value = null" 之前,Double H 的功能对我不起作用:https://***.com/a/42357862/634650

【讨论】:

【参考方案3】:

在您的模板中使用以下内容:

<div class="modal-body">
   <input type="file" (change)="fileChangeEvent($event)" placeholder="Upload file..." />
   <img id="preview" src="" >
</div>

然后你的组件fileChangeEvent() as

public fileChangeEvent(fileInput: any)
      if (fileInput.target.files && fileInput.target.files[0]) 
        var reader = new FileReader();

        reader.onload = function (e : any) 
            $('#preview').attr('src', e.target.result);
        

        reader.readAsDataURL(fileInput.target.files[0]);
    

您的所有文件相关信息都会控制台......

【讨论】:

谢谢,它有效。你知道我怎样才能显示选定的照片吗? fileInput.target.files 响应中没有路径。 如果我必须提交/上传同一个文件两次怎么办?如果我两次选择同一个文件,则不会触发更改事件。我可以使用某种提交事件吗? 我们可以在这里使用一种类型来代替“any”吗?我的项目中有任何残疾人 @MartijnvandenBergh 请参阅下面的 Chris 回答。

以上是关于Angular2文件输入onchange的主要内容,如果未能解决你的问题,请参考以下文章

Angular2:如果值没有改变,输入设置器不会拾取设置事件

Angular 2父组件丢失来自子组件的输入绑定

如何使用angular2中的mat-input来汇总在mat-table列中输入的值

Angular2 - 将输入验证数据从父输入传递到子输入

Angular2更新指令输入

Angular2 - 仅接受数字的输入字段