Angular4 实现多图片上传预览
来源:互联网 发布:音乐制作软件 编辑:程序博客网 时间:2024/05/25 12:22
之前写了一个angular1x的实现,但手痒痒于是就搞了一下angular4的实现方式,不BB直接上代码了。样式里用到了fontawesome的图标
首先我们直接看如何调用
别忘了我们还要在父元素的component.ts上创建previewImgFile
这个变量,否则就会报错,这里之所以和父组件通信,就是要把我们上传的file对象传给服务器,所以需要监听子组件的上传图片
<app-previewimg [(previewImgFile)]="previewImgFile"></app-previewimg>
我们再来看下这个组件的component和service
component.ts
import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';import {PreviewimgService} from "./previewimg.service";@Component({ selector: 'app-previewimg', templateUrl: './previewimg.component.html', styleUrls: ['./previewimg.component.css']})export class PreviewimgComponent implements OnInit { @Input() previewImgFile @Output() previewImgFileChange: EventEmitter<string> = new EventEmitter(); previewImgSrcs = []; constructor(public previewimgService: PreviewimgService) { } ngOnInit() { } previewPic(event) { if(!event.target.files[0]) { return; } let that = this; this.previewimgService.readAsDataUrl(event.target.files[0]).then(function(result) { that.previewImgSrcs.push(result) let file = event.target.files[0]; that.previewImgFile.push(file) that.previewImgFileChange.emit(that.previewImgFile); }) } remove(i) { this.previewImgSrcs.splice(i,1); this.previewImgFile.splice(i,1); }}
import { Injectable } from '@angular/core';@Injectable()export class PreviewimgService { constructor() { } getReader(resolve, reject) { let reader = new FileReader(); reader.onload = this.Onload(reader, resolve); reader.onerror = this.OnError(reader, reject); return reader; } readAsDataUrl(file){ let that = this; return new Promise(function(resolve,reject){ let reader = that.getReader(resolve, reject); reader.readAsDataURL(file); }) } Onload(reader: FileReader, resolve) { return () => { resolve(reader.result); } } OnError(reader: FileReader, reject) { return () => { reject(reader.result); } }}
component.css
.preview-label { width: 100px; height:100px; border:1px dotted #ccc; position: relative; vertical-align: top; display: inline-block}.preview-label>input { display: none;}.preview-label .uploadimgicon { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%);}.preview-label .uploadimgremove { position: absolute; top:5px; right:5px;}
component.html
<label class="preview-label" *ngFor="let img of previewImgSrcs let i = index"> <img src="{{img}}" width="100px" height="100px"> <i class="fa fa-remove uploadimgremove" (click)="remove(i)"></i></label><label class="preview-label"><input type="file" (change)="previewPic($event)"><i class="fa fa-2x fa-plus uploadimgicon"></i></label>
好啦,如果有bug可以及时反馈下,如果以后需要什么属性在继续封装,如果大家还有别的简单的封装,希望一起讨论下,博主小白,有错还希望见谅啊~~~
阅读全文
3 0
- Angular4 实现多图片上传预览
- 预览本地图片--Angular4
- 实现图片上传预览
- 上传图片实现预览
- 上传图片,实现图片预览
- 上传图片实现图片预览
- JS简单实现多图片预览上传
- Angularjs 实现多图片上传预览
- 多图片上传预览
- JavaScrip实现上传图片预览
- js实现图片上传预览
- 图片上传前预览实现
- js实现图片上传预览
- js实现图片上传预览
- js实现图片上传预览
- jQuery 实现 图片上传预览
- 图片上传预览功能实现
- JSP实现上传图片预览
- String类和StringBuffer类的区别
- 【状压DP】2017.9.24杂题[网格填数]题解
- C运算符优先级
- logback自定义写入,和不加加载问题
- 【算法课程作业】扫雷游戏
- Angular4 实现多图片上传预览
- Jetty修改默认端口
- PPの浅谈基础数据(一)
- 用javac编译.java文件
- Kotlin实现一个简单的登录界面
- Commando War UVA
- django基础入门(1)-搭建环境
- 7-6 用原子和字表的存储结构 , 编写求广义表长度的函数
- Codeforces Round #436 (Div. 2) E. Fire