element-plus组件之Upload(2.0)

接上篇

下面的属性就对应着回调函数,下面就一一进行介绍。

因为element-plus在封装upload组件时就自带了一个预览和删除的图标,只是没有方法实现,这里进行指明。

 

就是在图片墙列表中,自动就带了这两个图标和遮罩,下面的属性也与其相关

属性

①on-preview

 :on-preview="handlePreview",通过标签上属性的设置,我们来书写回调函数

  const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
    console.log('我是预览')
    console.log(uploadFile);
    
  }

 这样就可以看到这个回调函数的触发时机,就是我们点击每一个图标的时候触发,然后我们打印默认传递的参数来看看

我们可以看到,默认的参数就是我们点击的图片的详细信息,我们比较常用的就是URL属性,这样,就可以保存这张图片对应的地址信息,以便于本地收集和后续发送给后端。

 ②on-remove

同理,这个就是对应这哪个删除图标的回调调用时机,但是再触发该属性的钩子函数之前,还会触发另一个属性对应的钩子函数,就是:before-remove="beforeRemove"

 const beforeRemove: UploadProps['beforeRemove'] = (uploadFile, uploadFiles) => {
    return ElMessageBox.confirm(
      `Cancel the transfert of ${uploadFile.name} ?`
    ).then(
      () => true,
      () => false
    )
  }

 官网的案例就是用到了element的另一个组件ElmessageBox,消息盒子,对应的链接直接贴出来,就暂时不详细介绍了,毕竟主题是upload组件,MessageBox 消息弹框 | Element Plus

 当我们点击时出现的弹出框

删除后,对应的控制台就会打印我们 on-remove的回调

 

  const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => {
    console.log(file, uploadFiles)
  }

它拥有两个参数,显而易见,第一个参数就是删除的文件对象,第二个参数就是删除的文件数组,这里如果再做批量删除的业务时,此处就会显示数组中多个被删除的文件对象。

③on-success

④on-error

因为没有后端的服务器,上传成功的钩子打印结果看不出来,类比于失败的效果如下

  const handleError=(error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles)=>{
    console.log('上传失败')
    console.log('error',error)
    console.log('uploadFile',uploadFile)
    console.log('uploadFiles',uploadFiles)
  }

 

⑤on-progress

  const handleProgress=(event: ProgressEvent, uploadFile: UploadFile)=>{
    console.log('上传进度')
    console.log(event)
    console.log(uploadFile)

   }

第一个参数为上传进度对应的事件对象,第二个参数为上传的文件信息

 

⑥on-change

这个属性多用于再用户频繁修改上传的文件,就是在切换上传文件的时候触发

<template>
    <el-upload class="avatar-uploader" action="#" :show-file-list="false" :auto-upload="false"
        :on-change="handleChange">
        <img v-if="props.avatar" :src="uploadAvatar" class="avatar" />
        <el-icon v-else class="avatar-uploader-icon">
            <Plus />
        </el-icon>
    </el-upload>

</template>
/**
 * 文件变化时的处理函数
 *
 * @param file 文件对象
 * @param fileList 文件列表
 * @returns 无返回值
 */
const handleChange = (file:any, fileList:any) => {
    // 打印文件信息
    // 触发名为 "Mchange" 的事件,并传递文件原始数据作为参数

    emit("Mchange",file.raw)
}

 

⑦on-exceed

该属性经常与limit相互使用,当超过最大上传文件数量时,就会调用该属性的钩子函数

 

⑧before-upload

可以统一类比与上传文件的生命周期,该属性的钩子函数是最先执行的,顺序如下:before-upload-on-progress-成功on-success/失败on-error

   const beforeUpload=( uploadFile: UploadUserFile) => {
    console.log('开始上传')
    console.log(uploadFile)

   }

参数为上传的文件信息

 

⑨before-remove

总结: 这些调用回调函数的属性的执行顺序如下:上传前before-upload--上传过程on-progress--上传成功on-success/上传失败on-error--》后续操作--预览on-preview----切换on-change----删除前before-remove--删除on-remove,最后是一个上传限制on-exceed。在不同的阶段使用不同的属性,来执行不同的回调,做出相应的操作,完成时机场景中的功能需求。

在 Vue 2.0 项目中使用 Element UI 实现 PDF 文件缩略图预览功能,可以通过结合第三方库(如 `pdf.js`)与 `element-ui` 的组件来实现。以下是实现方法: ### 1. 使用 `element-ui` 的 `el-upload` 组件上传 PDF 文件 首先,通过 `el-upload` 组件实现文件上传功能,并在上传前或上传后获取文件对象,以便后续处理缩略图。 ```html <template> <el-upload action="#" list-type="picture-card" :auto-upload="false" :on-change="handleFileChange" :limit="1" > <i class="el-icon-plus"></i> </el-upload> </template> ``` ### 2. 使用 `pdf.js` 提取 PDF 缩略图 `pdf.js` 是 Mozilla 提供的一个开源库,能够在前端解析并渲染 PDF 文件。可以使用它来提取 PDF 的第一页并渲染为缩略图。 安装 `pdfjs-dist`: ```bash npm install pdfjs-dist ``` 然后在组件中引入并使用: ```javascript import * as pdfjsLib from 'pdfjs-dist'; import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry'; pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker; ``` 定义 `handleFileChange` 方法来处理文件并生成缩略图: ```javascript methods: { async handleFileChange(file) { const fileReader = new FileReader(); fileReader.onload = async () => { const typedArray = new Uint8Array(fileReader.result); const pdf = await pdfjsLib.getDocument({ pdfData: typedArray }).promise; const page = await pdf.getPage(1); // 获取第一页 const viewport = page.getViewport({ scale: 0.5 }); // 缩小比例 const canvas = document.createElement('canvas'); const context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; await page.render({ canvasContext: context, viewport }).promise; const thumbnailUrl = canvas.toDataURL('image/png'); // 转换为 base64 图像 this.thumbnail = thumbnailUrl; // 存储用于预览 }; fileReader.readAsArrayBuffer(file.raw); } } ``` ### 3. 在页面中展示缩略图 在模板中添加一个 `img` 标签用于展示生成的缩略图: ```html <template> <div> <el-upload action="#" list-type="picture-card" :auto-upload="false" :on-change="handleFileChange" :limit="1" > <i class="el-icon-plus"></i> </el-upload> <div v-if="thumbnail" style="margin-top: 20px;"> <img :src="thumbnail" alt="PDF Thumbnail" style="max-width: 100%; border: 1px solid #ccc;"> </div> </div> </template> ``` ### 4. 完整性与样式优化 可以为缩略图添加样式,使其更美观,例如添加边框、阴影、宽度限制等。此外,可以结合 `el-dialog` 组件实现点击缩略图后全屏预览 PDF 的功能。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值