vue+element ui 的上传文件使用组件
前言:工作中用到 vue+element ui 的前端框架,使用到上传文件,则想着封装为组件,达到复用,可扩展。转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9630868.html
网站地址:我的个人vue+element ui demo网站
github地址:yuleGH github

组件代码如下:
<div id="uploadComponent" style="display: none">
<el-upload ref="upload" class="upload-demo" :action="action" :data="data" :file-list="fileList"
show-file-list :limit="limit" :accept="accept" :disabled="disabled" :auto-upload="true"
:on-error="handleError" :on-success="handleSuccess" :on-remove="handleRemove" :on-exceed="handleExceed" :on-preview="handlePreview"
:before-upload="beforeAvatarUpload" :before-remove="beforeRemove">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</div>
以及:
<script type="text/javascript">
var uploadComponent = {
template : document.getElementById("uploadComponent").innerHTML,
data : function(){
return {
action : this.uploadUrl,
data : {},//向后台传额外参数
limit : this.fileLimit,
disabled : this.uploadDisabled, //接收文件类型,从数据字典取值
accept : ".jpg,.pdf",
//文件大小,从数据字典取值
uploadMaxSize : 1024*1024
}
},
props: {
/**
* 默认显示的附件
*/
attachmentList : {
type: Array,
default : function(){
return [];
}
},
/**
* 初始化上传组件,是否禁用
*/
uploadDisabled : {
type: Boolean,
default : false
},
/**
* 上传地址
*/
uploadUrl : {
type : String,
required : true
},
/**
* 文件 最大允许上传个数
*/
fileLimit : {
type : Number,
default : 5
}
},
computed: {
//默认文件列表
fileList : {
get : function(){
if(!this.attachmentList){
return [];
}
//可能会根据后台字段做一些特殊转换
return this.attachmentList;
},
set : function(){
console.log("set");
}
}
},
watch:{ },
created:function () {
},
mounted : function(){
var _self = this;
this.$nextTick(function () {
})
},
methods : {
/**
* 获取当前所有的附件
* @return {Array}
*/
getUploadFilesList : function(){
var uploadFiles = this.$refs.upload.uploadFiles;
return uploadFiles;
},
/**
* 设置组件可用
*/
setEditable : function(){
this.disabled = false;
},
/**
* 设置组件不可用
*/
setDisEditable : function(){
this.disabled = true;
}, /**
* 上传失败
* @param err
* @param file
* @param fileList
*/
handleError : function(err, file, fileList){
showAlert.call(this, '上传失败,系统未知错误!错误码为【500】', iconConstants.ERROR);
},
/**
* 上传成功
* @param response
* @param file
* @param fileList
*/
handleSuccess : function(response, file, fileList){
if(response.id){
//成功
showAlert.call(this, "上传成功!", iconConstants.SUCCESSAUTO);
}else{
//出错
showAlert.call(this, "上传失败!" + response.buinessMsg, iconConstants.ERROR); //删除该文件
var i = this.getFile(file, fileList);
fileList.splice(fileList.indexOf(i), 1);
}
},
getFile: function (file, fileList) {
fileList.forEach((x, i)=>{
if(x.uid === file.uid){
return x;
}
}); return null;
},
/**
* 移除文件之前
* 删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止上传。
* @param file
* @param fileList
*/
beforeRemove : function(file, fileList){
if(file){
var _self = this;
var result = showConfirmNoCancelCallBack.call(_self, "是否删除(" + file.name + ")?", iconConstants.QUESTION, function(){
showAlert.call(_self, "ajax访问后台删除,操作成功!", iconConstants.SUCCESSAUTO);
});
return result;
}
},
/**
* 删除文件
* @param file
* @param fileList
*/
handleRemove : function(file, fileList){ },
/**
* 文件超出个数限制时的钩子
* @param files
* @param fileList
*/
handleExceed : function(files, fileList){
showAlert.call(this, "当前限制选择 "+this.limit+" 个文件,本次选择了 "+files.length+" 个文件,共选择了 "+files.length + fileList.length+" 个文件", iconConstants.WARNING);
},
/**
* 点击文件列表中已上传的文件时的钩子
* @param file
*/
handlePreview : function(file){
console.log(file);
showAlert.call(this, "访问后台下载,操作成功!", iconConstants.SUCCESSAUTO);
},
/**
* 校验文件
* 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。
* @param file
* @return {boolean}
*/
beforeAvatarUpload: function(file){ if (file.size > this.uploadMaxSize) {
showAlert.call(this, "您文件大小不合法", iconConstants.ERRORAUTO);
return false;
} if(file.name.indexOf(",") > 0){
//您的文件名不合法,不能包含逗号,请检查后重新上传!
showAlert.call(this, "您的文件名不合法,不能包含逗号,请检查后重新上传!", iconConstants.ERRORAUTO);
return false;
} return true;
}
}
};
</script>
完。整体代码见 GitHub,喜欢就star,不定时更新。
转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9630868.html
vue+element ui 的上传文件使用组件的更多相关文章
- 封装Vue Element的upload上传组件
本来昨天就想分享封装的这个upload组件,结果刚写了两句话,就被边上的同事给偷窥上了,于是在我全神贯注地写分享的时候他就神不知鬼不觉地突然移动到我身边,腆着脸问我在干啥呢.卧槽你妈,当场就把我吓了一 ...
- 基于element UI 的上传插件
为了不再重复的上传文件,做了一个统一选择文件和上传文件的 基于 element UI :http://element-cn.eleme.io 前端实现文件下载和拖拽上传 演示 用法 <uploa ...
- easy ui 异步上传文件,跨域
easy ui 跨域上传文件,代码如下: 1.html代码:(这段代码是个win窗体,我在点击上传图片按钮然后弹出一个上传图片的窗体,选择图片再进行上传,这样在form提交时,提交的参数会少一点.) ...
- Ui自动化测试上传文件方法都在这里了
前言 实施UI自动化测试的时候,经常会遇见上传文件的操作,那么对于上传文件你知道几种方法呢?今天我们就总结一下几种常用的上传文件的方法,并分析一下每个方法的优点和缺点以及哪种方法效率,稳定性更高 被测 ...
- vue form表单上传文件
<script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js">< ...
- vue element多图上传
最近项目需要优化图片上传,由单个改成多个,这里记录下自己遇到的一些问题和解决方法 本以为是传全部图片到后台,然后统一处理,但后面在Network中发现upload组件其实还是单一上传,那只能依照它的方 ...
- 【要什么自行车】ASP.NET MVC4笔记02:上传文件 uploadify 组件使用
参考:http://www.cnblogs.com/luotaoyeah/p/3321070.html 1.下载 uploadify 组件,copy至 Content文件夹 <link href ...
- Angular4 后台管理系统搭建(10) - 做一个通用的可跨域上传文件的组件
写的很慢,不知不觉这是第十篇了.但是我其他事情太多,只能抽空写下.现在angular4或angular2流行的上传方式是ng2-file-upload.它的功能很强大.但是我没有配置成可以跨域上传的. ...
- element ui图片上传方法
<!--商品图片--> <template v-slot:product_cover> <el-upload list-type="picture-card&q ...
随机推荐
- 弦论(tjoi2015,bzoj3998)(sam(后缀自动机))
对于一个给定长度为\(N\)的字符串,求它的第\(K\)小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串\(S\) 第二行为两个整数\(T\)和\(K\),\(T\)为0则表示不同 ...
- centos 6 下,zephir的安装和使用
centos 6 下,zephir的安装和使用 zephir或许会开启一个新的PHP编写方式. 在这之前,如果我们要编写php的扩展,一般都是c++/clang/vc等等. 但是现在,我们有了新的选择 ...
- vue 学前班001(基础概念)
1 学习目标 通过这一节,你会学会: 1.目前前端技术使用的趋势 2.什么是MVVM 3.Vue.js的两大核心 4.Vue.js的适用场景 诞生背景 近几年来,得益于手机设备的普及和性能的提升, ...
- 深入set和dict
一. 浅拷贝和深拷贝 浅拷贝:就是创建一个具有相同类型,相同值但不同id的新对象. 浅拷贝产生的新对象中可变对象的值在发生改变时,会对原对象的值也做出改变,因为这些值是同一个引用. a = [1 ...
- 导数、多元函数、梯度、链式法则及 BP 神经网络
一元函数的导数 对于函数\(y=f(x)\),导数可记做\(f'(x_0)\).\(y'|x=x_0\)或\(\frac{dy}{dx}|x=x_0 \).定义如下: \[f'(x_0) = \lim ...
- Github只下载某一目录的文件
比如要下载: https://github.com/xubo245/SparkLearning/tree/master/docs 将“tree/master”改成“trunk https://gith ...
- 初始化css文件
首先我们需要了解一下为什么需要公共样式(公共样式是为了初始化某些标签的默认值): 1. 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差 ...
- 使用openssh-clients的scp命令来传输文件
了解openssh-client是请参阅:https://blog.csdn.net/u010215256/article/details/53239905 了解scp命令来传输文件请参阅:https ...
- Linux用户权限规范 /etc/sudoers文件解释
# User privilege specification root ALL=(ALL) ALL # Members of the admin group may gain root privile ...
- 在 mac 上利用 homebrew 安装软件
在mac经常需要安装一些软件,你可以通过app store下载,或者可以通过浏览袭搜索下载.这里介绍通过homebrew安装一些软件,它会自动为你下载一些软件的相关依赖,免去安装的烦恼. 首先我们需要 ...