NG-ZORRO 使用相关
Upload上传
import { Component, Input, Output, EventEmitter, Inject } from '@angular/core';
import { NzMessageService, UploadFile, UploadFilter, UploadXHRArgs } from 'ng-zorro-antd';
import {
HttpRequest,
HttpClient,
HttpEventType,
HttpEvent,
HttpResponse
} from '@angular/common/http';
import { forkJoin } from 'rxjs';
import { HttpService } from './httpService';
export class File {
uid: '';
name: '';
status: 'done';
url: '';
}
export class UploadFileType {
'fileId': '';
'fileName': '';
'fileSize': '';
'fileUrl': '';
'sequence': '0';
}
@Component({
selector: 'UploadPictureCardComponent',
template: `
<nz-upload
[nzAction]='urlConfig.url+"文件上传地址后缀"'
(nzChange)="handleChange($event)"
nzListType="picture-card"
[nzBeforeUpload]="beforeUpload"
[nzFilter]="filters"
[nzShowUploadList]="false"
[(nzFileList)]="fileList">
<i class="anticon anticon-plus"></i>
<div *ngIf='!childIsLoad' class="ant-upload-text">Upload</div>
<div *ngIf='childIsLoad' class="ant-upload-text">文件上传中{{progress}}...</div>
</nz-upload>
`
})
export class UploadPictureCardComponent {
fileList: File[] = [];
uploadFiles: UploadFileType[] = [];
previewImage = '';
previewVisible = false;
progress = ''; //上传进度
@Input() childIsLoad;
@Input() flieSessionStoragesName; //文件存在sessionStorage中的键值
@Output() private childOuter = new EventEmitter(); //子组件向父组件传值
@Output() private childIsLoadOuter = new EventEmitter(); //告诉父组件是否上传中
constructor(
private msg: NzMessageService,
private httpService: HttpService,
@Inject('urlConfig') public urlConfig
) {}
ngOnInit() {
//初始化文件
} //上传限制
filters: UploadFilter[] = [
{
name: 'type',
fn: (fileList: UploadFile[]) => {
const filterFiles = fileList.filter(
w =>
~['image/png', 'image/jpg', 'image/gif', 'image/bmp', 'image/jpeg'].indexOf(
w.type
)
);
if (filterFiles.length !== fileList.length) {
this.msg.create('error', '请上传png、jpg、gif、bmp、jpeg格式的图片!');
return filterFiles;
}
return fileList;
}
}
];
//上传之前的操作
beforeUpload = (file: File) => {
let ispass = true; //是否继续往下执行
console.log('上传之前的操作');
//以下操作在
if (window.sessionStorage.getItem(this.flieSessionStoragesName)) {
let list_ = JSON.parse(window.sessionStorage.getItem(this.flieSessionStoragesName));
for (let i in list_) {
if (file.name == list_[i].fileName) {
ispass = false;
this.msg.create('warning', '请勿上传同名文件!');
break;
}
}
}
return ispass; //返回true继续执行,false直接停止
}; //开始、上传进度、完成、失败都会调用这个函数
handleChange(info: any): void {
console.log(info);
if (info.type == 'start') {
this.childIsLoadOuter.emit(true); //告诉父组件上传中
this.progress = '0%';
}
if (info.type == 'progress') {
this.progress = info.event.percent.toFixed(2) + '%';
}
if (info.type === 'success') {
this.progress = '';
console.log(info);
let file = new UploadFileType();
file.fileId = info.file.response['data'].id;
file.fileName = info.file.response['data'].name;
file.fileSize = info.file.response['data'].size;
file.fileUrl = info.file.response['data'].downloadUrl;
file.sequence = '0';
this.childOuter.emit(file); //向父组件传值
this.childIsLoadOuter.emit(false); //告诉父组件上传完成
this.msg.create('success', '上传成功!');
}
if (info.type === 'error') {
this.childIsLoadOuter.emit(false); //告诉父组件上传完成
}
}
}
NG-ZORRO 使用相关的更多相关文章
- Angular: 执行ng lint后如何快速修改错误
当我第一次被分配到“修正执行ng lint语句后的错误”这项任务前,我就被导师提前告知这是一个很无聊的任务,当我开始后,我发现其实有一些办法可以加快这个无聊单调的工作.接下来,我就分享一下我的经验. ...
- 记录项目版本升级angular4 ~ angular5
前言: 在上一篇ng4文章<angular4--实际项目搭建总结>中说过,等到ng5正式发布,并且蚂蚁的NG ZORRO兼容ng5之后,我会对ng4项目进行升级.这篇文章就是大概说下升级的 ...
- 如何用ABP框架快速完成项目(6) - 用ABP一个人快速完成项目(2) - 使用多个成熟控件框架
正如我在<office365的开发者训练营,免费,在微软广州举办>课程里面所讲的, 站在巨人的肩膀上的其中一项就是, 尽量使用别人成熟的框架. 其中也包括了控件框架 abp和52abp ...
- 52ABP模板 ASP.Net Core 与 Angular的开源实例项目
阅读文本大概需要 5 分钟. 开始之前 自从上一篇文章".NET:持续进化的统一开发平台"发布后,已经有三个月的时间没有写过文章了. 这段时间,做了两场线下活动,一场在上海,一场在 ...
- Angular2常用命令
一.常用命令 1.1 npm config list配置项目 可进行相关代理配置,通常可以配置在网络环境较差的情况下,配置相关代理.相关的设置命令如图: 1.2 ng 新建启动项目 ng new pr ...
- 2021 年最值得推荐的 7 个 Angular 前端组件库 - DevUI
摘要:DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸.灵活.至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠.取悦眼球的设计.如果你正在开发 ToB 的工 ...
- 嵌入式单片机STM32应用技术(课本)
目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...
- Andrew Ng机器学习笔记+Weka相关算法实现(四)SVM和原始对偶问题
这篇博客主要解说了Ng的课第六.七个视频,涉及到的内容包含,函数间隔和几何间隔.最优间隔分类器 ( Optimal Margin Classifier).原始/对偶问题 ( Primal/Dual P ...
- Andrew Ng机器学习笔记+Weka相关算法实现(五)SVM最优间隔和核方法
这一章主要解说Ng的机器学习中SVM的兴许内容.主要包括最优间隔分类器求解.核方法. 最优间隔分类器的求解 利用以一篇讲过的的原始对偶问题求解的思路,我们能够将相似思路运用到SVM的求解上来. 详细的 ...
- 走进AngularJs(二) ng模板中常用指令的使用方式
通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的.ng的模板真是让我爱不释手.学习ng道路还很漫长,从模板 ...
随机推荐
- AntzOs系列导航
Antz操作系统 一个自制的操作系统,Antz .半图形化半命令式系统,同时嵌入Antzscript脚本语言(写在之后). 自制操作系统Antz(1)——Boot Sector 自制操作系统Antz( ...
- Saiku默认给数据类型的数据添加小数点问题处理(三十一)
Saiku默认给数据类型的数据添加小数点问题处理 不知道大家有没有遇到过saiku定义的维度信息,数据类型时 展示出来的数据会自动加上 .0的后缀. 比如我定义了一个维度为 年, 在数据库中为 int ...
- pytest框架之rerunfailures失败重运行机制
web自动化测试中,稳定性在整个测试运行中都至关重要,但不能保证测试脚本或者测试环境一直都能够稳定,它牵扯到诸多因素,在这里就不赘述,pytest框架相较于unittest的一大优势就在于拥有用例失败 ...
- Java入门系列之字符串创建方式、判断相等(一)
前言 陆续从0开始学习Java出于多掌握一门语言以后的路也会更宽,.NET和Java兼顾,虽然路还很艰难,但事在人为.由于Java和C#语法相似,所以关于一些很基础的内容不会再重头讲,Java系列中所 ...
- Android中几种常用的定时器和延时方法
通过实际项目的练习,掌握了几种android基本定时器和延时的用法,这里我想总结一下作为自己的收获,下面列出的是比较简洁的模式,方便简单地在程序中直接调用. 一.三种常用的定时器 1.Handler类 ...
- pycharm 取消连按两下shift出现的全局搜索
在来回切换中英文输入法的时候连按两下shift总是会蹦出来全局搜索框 真的很是麻烦,现在是把这个框给禁用掉 1.按ctrl+shift+a,弹出搜索框2.输入registry,然后按回车3.找到“id ...
- Qt窗口退出与事件循环退出的问题
我在Qt主程序中开启一个线程,线程中使用信号-槽来产生QMainWindow(GUI),main函数代码如下:int main(int argc, char *argv[]){ QApplicatio ...
- Dynamics CRM 客户端程序开发:自定义系统标准按钮的可用性
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复125或者20140414可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 一般是新建一个解决方案用于客制化 ...
- 如何突破DNS报文的512字节限制
- DNS的512字节限制 根据协议标准,DNS协议同时占用UDP和TCP的53端口,这是为什么呢? 翻阅DNS资料,可以发现,DNS协议默认按UDP传输,为优化传输性能,DNS协议有一个512字节的 ...
- 基于file上传文件的并发上传(多个文件一起上传到后台并把数据存储的同一条数据中,如 数据库字段videopath,imge。前台发送来的文件file1,file2。 videopath=file1,imge=file2)
前台代码: <div class="tab-content"> <dl> <dt>所属栏目</dt> <dd> < ...