Angular6自定义指令实现多图片上传预览
在做移动端开发多时候经常会遇到用户图片上传的需求,有单图片上传预览的需求,也有多图片上传预览的需求。自己刚遇到这个需求的时候有踩到各种个样到坑。经过多番尝试,下面将本人成功的一个案例分享出来(公司对外网访问非常严格,所以只能自己重写一个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自定义指令实现多图片上传预览相关推荐
- JavaScript 图片上传预览效果
图片上传预览是一种在图片上传之前对图片进行本地预览的技术. 使用户选择图片后能立即查看图片,而不需上传服务器,提高用户体验. 但随着浏览器安全性的提高,要实现图片上传预览也越来越困难. 不过群众的智慧 ...
- php 图片上传预览(转)
网上找的图片上传预览: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...
- js实现图片上传预览及进度条
js实现图片上传预览及进度条 原文js实现图片上传预览及进度条 最近在做图片上传的时候,由于产品设计的比较fashion,上网找了比较久还没有现成的,因此自己做了一个,实现的功能如下: 1:去除浏览器 ...
- JAVA实现一个图片上传预览功能
这个小项目主要使用java实现了一个简单的图片上传预览功能,废话不多说,先上实现成果 ^ _ ^
- java 图片上传 预览 demo_图片上传预览
[实例简介] 实现图片上传预览,可以增加新的空数组,并上传和替换.还有删除功能:提交的时候,还可以判断是否有空的img [实例截图] [核心代码] 613ddc50-96b8-4197-ba2e-1e ...
- ASP.NET工作笔记之一:图片上传预览及无刷新上传
转自:http://www.cnblogs.com/sibiyellow/archive/2012/04/27/jqueryformjs.html 最近项目里面涉及到无刷新上传图片的功能,其实也就是上 ...
- Bootstrap 3 : 图片上传预览 image upload preview
头部均为: <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css" rel= ...
- 模拟QQ心情图片上传预览
出于安全性能的考虑,目前js端不支持获取本地图片进行预览,正好在做一款类似于QQ心情的发布框,找了不少jquery插件,没几个能满足需求,因此自己使用SWFuplad来实现这个图片上传预览. 先粘上以 ...
- js实现图片上传预览功能
js实现图片上传预览功能 很多业务场景下,我们需要在用户上传图片前,先预览待上传的图片 <body><input type="file"><img s ...
最新文章
- 计算机应用基础 试卷分析,高中政治试卷分析.doc
- ASCII计算机语言,unicode和ascii的区别是什么
- 机器学习并不“万能”
- HDFS伪分布式环境搭建
- VS2010(VS2008)下安装配置OpenCV
- 笔记28 接受请求的输入 ——处理表单
- Codeforces Round #602 (Div. 2) D2. Optimal Subsequences stl 黑科技
- [Apple开发者帐户帮助]八、管理档案(2)创建临时配置文件(iOS,tvOS,watchOS)...
- 阿里小程序云应用上线了,有哪些看点?
- IOS 设置文件是否使用ARC
- Daily scrum 11.22
- 机器学习之熵【从定义到代码】
- 趣图 | 著名的悖论蒙提霍尔问题到底是什么?
- 2. mac mysql error
- iphone实用配置工具_除了让你买买买,苹果官网还隐藏着这些实用网页工具
- 【Arduino】基础传感器使用
- 去掉svn的蓝色问号
- Python基础之面向对象基础
- 联想笔记本重装win11系统后恢复fn+q热键
- ethereum-etl拉取以太坊数据
热门文章
- python画散点图类型-绘制python中的线和散点图
- python自动化测试看什么书-Python自动化测试入门,看这一篇就足以
- python处理流程-在python异步协程中处理流程分析(一)
- python xpath语法-Python Xpath语法
- python语言入门w-Python 基础教程
- 错误:pytube.exceptions.RegexMatchError
- opencv python 中cv2.putText()函数的用法
- 如何获取html页面上的按钮列表,如何从一个html页面获取单选按钮的值到另一个?...
- es中发现结点的角色
- UVa12604 Caesar Cipher(kmp)