A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近在做项目的时候遇到在浏览器中上传视频的需求,使用Element-UI的upload组件。具体效果如下

总的来说是很简单的,但一定要仔细对照官方文档,并且因为我使用了typescript,其中也遇到了一个坑。

对照了一下官方文档,所需要注意的部分:
只能上传一个视频并且禁止多选 :limit="1",accept="video/*", :multiple="false",
当重复上传时弹出错误弹窗 :on-exceed="exceed"
当有文件被选中时,样式会如图发生变化
同时实现选择上传与拖拽上传
手动上传,即用户选中上传按钮之后才进行上传:auto-upload="false"
上传中后台返回进度,并利用<el-progress>显示实时进度(因为目前还没有后台数据所以这部分还是静态的)
具体代码如下:

<div class="upload" v-show="!uploadTrue">
    <el-upload
        ref="upload"
        drag
        action="https://jsonplaceholder.typicode.com/posts/"
        accept="video/*"
        :multiple="false"
        :limit="1"
        :on-remove="remove"
        :on-change="handleChange"
        :file-list="fileList"
        :on-exceed="exceed"
        :auto-upload="false"
        :on-progress="uploading">
        <img src="../../../static/imgs/upload_img_file.png" alt="" class="uploadImg">
        <p class="text1">拖拽文件至此区域</p>
        <p class="text2" id="text2">或</p>
        <p class="text3" id="text3">浏览本地文件</p>
    </el-upload>
</div>

methods: {
    uploading() {
        //上传中
        console.log("uploading")
        if (this.uploadProgress == 100) {
            //上传完成
            this.uploadStatus = true
        }
    },
    handleChange() {
        //添加文件(样式变化)
        var el:any = document.getElementById("text2")
        var ele:any = document.getElementById("text3")
        if(this.fileList != null) {
            el.style.display = "none"
            ele.style.display = "none"
        }
    },
    remove() {
        //删除视频的钩子
        var el:any = document.getElementById("text2")
        var ele:any = document.getElementById("text3")
        el.style.display = "inline-block"
        ele.style.display = "inline-block"
    },
    exceed() {
        //重复选择文件,弹出错误弹窗
        this.$alert("最多仅支持上传一个视频文件")
    },
    uploadVideo() {
        //上传文件
        let element:any = this.$refs.upload
        element.submit();
        //
        //开始上传
        //服务端返回进度uploadProgress
        this.uploadTrue = true
    }
}

使用typescript中遇到的坑
根据官方文档,当使用手动上传时在<el-upload> 中 使用 ref="upload",并在上传的函数中使用this.$refs.upload.submit()。但是,一直报错

  Property 'submit' does not exist on type 'Vue | Element | Vue[] | Element[]'.
  Property 'submit' does not exist on type 'Vue'.

上网查了很久,发现是在typescript中无法识别vue中的$refs并且ts使用强类型,必须先使用any来进行声明

    let element:any = this.$refs.upload
    element.submit();
---------------------
作者:wantingtr
来源:CSDN
原文:https://blog.csdn.net/wantingtr/article/details/87803700


1 个回复

倒序浏览
一个人一座城0.0 来自手机 中级黑马 2019-2-24 22:51:36
沙发
看一看。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马