ElementUI组件系列解读之<Upload>

118 阅读2分钟

EL-Upload

先来看看这个组件都有哪些props

图片139.png

图片140.png

可以看到它可以传的参数还是非常多的,其中钩子函数也不少(作为一个公共组件,我们尽量减少与某些业务强相关的逻辑,而应该使用暴露钩子函数方式,让调用者更灵活处理)

那它实现的功能又有哪些呢?

1. 点击上传

2. 头像上传

3. 照片墙

4. 文件缩略图

5. 图片列表缩略图

6. 上传文件列表控制

7. 拖拽上传

8. 手动上传

 

下面我们看看它的基本使用结构

图片141.png

图片142.png

我们先从最基本的功能看起:

图片143.png

图片144.png

注意看  其实函数也是可以通过props的方式传进来的,而不需要使用@onSuccess = xxx  this.$emit( onSuccess ) 去调用它

尤其是钩子函数

Index.vue源码部分

图片145.png

图片146.png  

再看看upload组件部分

图片147.png

可以看到  尽管在父组件传进来的...拓展过的props对象  但是在upload组件中依然可以使用props获取到 不会影响正常使用

我们看看upload的render函数

图片148.png

图片149.png

 

现在我们就开始最基本的上传功能分解:点击--选择--上传--触发钩子函数

图片150.png

图片151.png

图片152.png

我们来重点关注ajax的写法 以及xhr的一些关键api

图片153.png

图片154.png

那假如我们想中止上传怎么处理呢?

图片155.png

图片156.png

图片157.png

下面我们看看上传文件列表组件是怎么展示的以及有哪些

图片158.png

图片159.png

图片160.png

 

最后我们再看看拖动上传是怎么回事?

图片161.png

图片162.png

图片163.png

这里需要注意的是 @drap 和 @drapover @drapleave都是Vue给我们提供的拖动api

我们可以在drap的e中获得当前拖动的文件对象  e.dataTransfer.files  它跟我们单独选的文件对象是一样的结构


至此  el-upload上传组件就分析完毕了