在做移动端开发多时候经常会遇到用户图片上传的需求,有单图片上传预览的需求,也有多图片上传预览的需求。自己刚遇到这个需求的时候有踩到各种个样到坑。经过多番尝试,下面将本人成功的一个案例分享出来(公司对外网访问非常严格,所以只能自己重写一个demo来摆弄,亲测可行):

1、先在我们的项目通过cli命令行创建出我们要实现上传文件的组件:

    ng generate component fileReader
复制代码

file-reader.component.html文件的html代码如下:

    <label class="preview-btn">浏览图片<input type="file" appFileReader (onLoad)="addLoad($event)" multiple style="display:none"/></label><div *ngIf="previewImg.length > 0"><img *ngFor="let img of previewImg" src="{{img}}" alt=""></div><br><button *ngIf="previewImg.length > 0" (click)="clearPreviewImg()" class="preview-btn">清除图片</button>
复制代码

file-reader.component.scss样式文件对按钮对样式稍加美化:

    .preview-btn{width: 100px;border-radius: 4px;height: 36px;line-height: 36px;background-color: greenyellow;color: #fff;text-align: center;display: block;cursor: pointer;border: none;outline: none;}
复制代码

file-reader.component.ts里面的代码如下:

import { Component, OnInit } from '@angular/core';@Component({selector: 'app-file-reader',templateUrl: './file-reader.component.html',styleUrls: ['./file-reader.component.scss'],
})
export class FileReaderComponent implements OnInit {previewImg: Array<string> = [];constructor() { }ngOnInit() {}addLoad(e: string) {this.previewImg.push(e);}clearPreviewImg() {this.previewImg = [];}
}
复制代码

2、然后通过cli命令创建出我们要实现上传预览功能的自定义指令:

    ng generate directive fileReader
复制代码

创建的文件file-reader.directive.ts逻辑代码如下,具体的功能代码也有相应的注释

import { Directive, ElementRef, HostListener, Output, EventEmitter } from '@angular/core';/*** 图片选择转换成base64*/
@Directive({selector: '[appFileReader]'
})
export class FileReaderDirective {// tslint:disable-next-line: no-output-on-prefix@Output()onLoad = new EventEmitter();constructor(private elementRef: ElementRef) { }/*** HostListener给宿主元素添加change事件* 获取到的files是一个文件列表,不能直接遍历,需要先Array.from转数组类型*/@HostListener('change')public onChange(): any {const files = this.elementRef.nativeElement.files;if (files && files.length > 0) {Array.from(files).map((item: File, index: number) => {const file: File = item;const myReader: FileReader = new FileReader();/*** onabort  当读取操作被中止时调用* onerror    当读取操作发生错误时调用* onload    当读取操作成功完成时调用* onloadend 当读取操作完成时调用,不管是成功还是失败.该处理程序在onload或者onerror之后调用* onloadstart 当读取操作将要开始之前调用* onprogress   在读取数据过程中周期性调用*/myReader.onloadend = (loadEvent: any) => {this.onLoad.emit(loadEvent.target.result);};/*** readAsBinaryString(file) 将文件读取为二进制编码* readAsText(file,[encoding])    将文件读取为文本* readAsDataURL(file)   将文件读取为DataURL* abort(none)  终端读取操作*/myReader.readAsDataURL(file);});}}}
复制代码

到这一步我们就基本已经把angular2+自定义指令实现多图片上传预览这一个功能完成了。接下来要怎么玩就看大家的具体需求是怎样子的了,反正预览的图片数据已经拿到。

第一次写博客,有不完善的地方希望各位大佬不要吝啬给出意见。

Angular6自定义指令实现多图片上传预览相关推荐

  1. JavaScript 图片上传预览效果

    图片上传预览是一种在图片上传之前对图片进行本地预览的技术. 使用户选择图片后能立即查看图片,而不需上传服务器,提高用户体验. 但随着浏览器安全性的提高,要实现图片上传预览也越来越困难. 不过群众的智慧 ...

  2. php 图片上传预览(转)

    网上找的图片上传预览: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  3. js实现图片上传预览及进度条

    js实现图片上传预览及进度条 原文js实现图片上传预览及进度条 最近在做图片上传的时候,由于产品设计的比较fashion,上网找了比较久还没有现成的,因此自己做了一个,实现的功能如下: 1:去除浏览器 ...

  4. JAVA实现一个图片上传预览功能

    这个小项目主要使用java实现了一个简单的图片上传预览功能,废话不多说,先上实现成果 ^ _ ^

  5. java 图片上传 预览 demo_图片上传预览

    [实例简介] 实现图片上传预览,可以增加新的空数组,并上传和替换.还有删除功能:提交的时候,还可以判断是否有空的img [实例截图] [核心代码] 613ddc50-96b8-4197-ba2e-1e ...

  6. ASP.NET工作笔记之一:图片上传预览及无刷新上传

    转自:http://www.cnblogs.com/sibiyellow/archive/2012/04/27/jqueryformjs.html 最近项目里面涉及到无刷新上传图片的功能,其实也就是上 ...

  7. Bootstrap 3 : 图片上传预览 image upload preview

    头部均为: <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css" rel= ...

  8. 模拟QQ心情图片上传预览

    出于安全性能的考虑,目前js端不支持获取本地图片进行预览,正好在做一款类似于QQ心情的发布框,找了不少jquery插件,没几个能满足需求,因此自己使用SWFuplad来实现这个图片上传预览. 先粘上以 ...

  9. js实现图片上传预览功能

    js实现图片上传预览功能 很多业务场景下,我们需要在用户上传图片前,先预览待上传的图片 <body><input type="file"><img s ...

最新文章

  1. 计算机应用基础 试卷分析,高中政治试卷分析.doc
  2. ASCII计算机语言,unicode和ascii的区别是什么
  3. 机器学习并不“万能”
  4. HDFS伪分布式环境搭建
  5. VS2010(VS2008)下安装配置OpenCV
  6. 笔记28 接受请求的输入 ——处理表单
  7. Codeforces Round #602 (Div. 2) D2. Optimal Subsequences stl 黑科技
  8. [Apple开发者帐户帮助]八、管理档案(2)创建临时配置文件(iOS,tvOS,watchOS)...
  9. 阿里小程序云应用上线了,有哪些看点?
  10. IOS 设置文件是否使用ARC
  11. Daily scrum 11.22
  12. 机器学习之熵【从定义到代码】
  13. 趣图 | 著名的悖论蒙提霍尔问题到底是什么?
  14. 2. mac mysql error
  15. iphone实用配置工具_除了让你买买买,苹果官网还隐藏着这些实用网页工具
  16. 【Arduino】基础传感器使用
  17. 去掉svn的蓝色问号
  18. Python基础之面向对象基础
  19. 联想笔记本重装win11系统后恢复fn+q热键
  20. ethereum-etl拉取以太坊数据

热门文章

  1. python画散点图类型-绘制python中的线和散点图
  2. python自动化测试看什么书-Python自动化测试入门,看这一篇就足以
  3. python处理流程-在python异步协程中处理流程分析(一)
  4. python xpath语法-Python Xpath语法
  5. python语言入门w-Python 基础教程
  6. 错误:pytube.exceptions.RegexMatchError
  7. opencv python 中cv2.putText()函数的用法
  8. 如何获取html页面上的按钮列表,如何从一个html页面获取单选按钮的值到另一个?...
  9. es中发现结点的角色
  10. UVa12604 Caesar Cipher(kmp)