Element-ui中的el-image的图片预览功能(:preview-src-list)

这篇博客主要介绍了如何修改Element-UI的图片预览功能,以适应在表格中显示多张图片并实现点击预览的需求。作者通过在表格单元格中使用`<el-image>`组件,结合`v-for`指令动态渲染图片,并添加点击事件处理函数`clickevaluatePicture`,将后端返回的图片路径放入数组中,从而在点击时以轮播图形式预览当前选中的图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天用了element-ui中的图片预览功能,但是它的图片预览功能只能预览事先定义的图片,与我的业务功能完全不符,我的业务功能是在表格上显示多张图片,当点击图片时,就预览当前点击的图片。
所以我将其修改了一下,将后端返回的图片依次渲染在页面上;功能就是当点击表格中的某个图片时,这个图片就被放大预览,且图片的显示是以轮播图的形式展现出来。

 

<div v-show="scope.row.evaluatePicture&&scope.row.evaluatePicture.length" style="display: flex; align-items: center; flex-direction: column;">
              <el-image
                v-for="(item,index) in scope.row.evaluatePicture"
                :key="index"
                style="width: 50px; height: 50px"
                :src="$_BASE_IMG_API + item"
                :preview-src-list="evaluatePictureList"
                title="点击查看图片"
                @click="clickevaluatePicture(scope.row)"
              />
            </div>

上面的这段代码与element-ui中的没有区别,唯一的区别就是我设置了一个点击事件click。
在下面的js中,定义srcList(也是就是我的evaluatePictureList)变量。:src是显示的图片,我使用v-for来动态创建多个<el-image></el-image>,这个就可以在页面上渲染多张图片了。 


methods:{
// 点击评价图片,大图预览多张图片
    clickevaluatePicture (row) {
      var srclist = []
      for (const imgArr of row.evaluatePicture) {
// 把数据库传来的图片放进数组里
        srclist.push(this.$_BASE_IMG_API + imgArr) 
      }
      this.evaluatePictureList = srclist// 赋值
}
}

push 把我数据库的图片放进数组里 因为在那个定义srcList(也是就是我的evaluatePictureList)变量,它要求的必须是数组的形式,而我拿到的数据是 ‘one-stand/photo/20211209/a3c81a587afbf317af42566dc207c5b5.jpg, ....’,所以就得多次把数据放进数组里 

<think>在Element UI 2.10.1版本中,`el-image`组件的`preview-src-list`属性点击无效的原因主要是该版本尚未支持预览功能。根据Element UI的官方更新日志,图片组件的预览功能是在2.13.0版本中才引入的。因此,在2.10.1版本中,即使配置了`preview-src-list`属性,也不会显示大图预览。 ### 问题原因 1. **版本过低**:Element UI 2.10.1版本中`el-image`组件不支持预览功能。 2. **属性无效**:在2.10.1版本中,`preview-src-list`属性不会被识别,因此点击图片不会触发预览。 ### 解决方案 #### 方案一:升级Element UI版本(推荐) 升级到2.13.0及以上版本,这是最直接的解决方案。 ```bash # 升级到最新稳定版 npm install element-ui@2.15.14 ``` #### 方案二:使用低版本兼容方案(不升级) 如果无法升级,可以采用以下替代方法实现图片预览: 1. **使用`el-dialog`自定义预览**:点击图片时打开一个对话框显示大图。 2. **使用第三方图片预览库**:如`viewer.js`。 ### 自定义预览功能示例代码 ```vue <template> <div> <!-- 图片缩略图 --> <el-image :src="thumbnail" style="width: 200px;" @click="openPreview" /> <!-- 预览对话框 --> <el-dialog :visible.sync="dialogVisible" title="图片预览" width="80%" > <img :src="previewImage" style="width: 100%;" /> </el-dialog> </div> </template> <script> export default { data() { return { thumbnail: "https://via.placeholder.com/200", previewImage: "https://via.placeholder.com/800", dialogVisible: false }; }, methods: { openPreview() { this.dialogVisible = true; } } }; </script> ``` ### 多图预览兼容方案 如果需要多图预览(类似`preview-src-list`功能),可以使用轮播图组件: ```vue <template> <div> <el-image :src="previewList[0]" style="width: 200px;" @click="openPreview(0)" /> <el-dialog :visible.sync="dialogVisible" title="图片预览" width="80%" > <el-carousel :initial-index="previewIndex" indicator-position="outside"> <el-carousel-item v-for="(item, index) in previewList" :key="index"> <img :src="item" style="width: 100%;" /> </el-carousel-item> </el-carousel> </el-dialog> </div> </template> <script> export default { data() { return { previewList: [ "https://via.placeholder.com/800/ff0000", "https://via.placeholder.com/800/00ff00", "https://via.placeholder.com/800/0000ff" ], dialogVisible: false, previewIndex: 0 }; }, methods: { openPreview(index) { this.previewIndex = index; this.dialogVisible = true; } } }; </script> ``` ### 注意事项 1. **升级风险**:升级Element UI版本可能带来其他兼容性问题,建议在测试环境中先进行验证。 2. **替代方案性能**:自定义方案在大量图片时可能存在性能问题,建议使用第三方优化库(如`vue-photo-preview`)替代。 ### 总结 | 问题原因 | 解决方案 | |----------------------|----------------------------------| | Element UI版本过低 | 升级到2.13.0+ | | 无法升级时功能缺失 | 使用`el-dialog`+`el-carousel`自定义预览 | §§相关问题§§: 1. Element UI 2.10.1版本中还有哪些常用组件功能受限? 2. 如何安全地升级Element UI版本以避免破坏现有功能? 3. Vue项目中如何实现高性能的图片预览组件? 4. 除了Element UI,还有哪些Vue图片预览组件库推荐?</think>### 问题原因分析 在 Element UI 2.10.1 版本中,`el-image` 组件点击预览功能无效的主要原因是:**该功能在此版本中尚未实现**。根据 Element UI 的官方更新日志: - **预览功能引入时间**:`preview-src-list` 功能是在 **2.13.0 版本** 才正式加入的 - **2.10.1 版本限制**:此版本只支持基本的图片展示功能,没有集成预览组件 --- ### 解决方案(不升级版本) #### 方案一:使用 `el-dialog` 自定义预览 ```vue <template> <div> <!-- 缩略图 --> <el-image :src="thumbnail" style="width: 200px; cursor: pointer" @click="openPreview" /> <!-- 预览对话框 --> <el-dialog :visible.sync="dialogVisible" width="80%" top="5vh" > <img :src="previewImage" style="width: 100%; max-height: 80vh; object-fit: contain"> </el-dialog> </div> </template> <script> export default { data() { return { thumbnail: "https://via.placeholder.com/200", previewImage: "https://via.placeholder.com/1200", dialogVisible: false }; }, methods: { openPreview() { this.dialogVisible = true; } } }; </script> ``` #### 方案二:实现多图预览(带缩略图) ```vue <template> <div> <!-- 主图 --> <el-image :src="previewList[currentIndex]" style="width: 300px; margin-bottom: 20px" @click="openPreview" /> <!-- 缩略图列表 --> <div style="display: flex; gap: 10px"> <div v-for="(img, index) in previewList" :key="index" @click="currentIndex = index" :style="{ border: currentIndex === index ? '2px solid #409EFF' : '1px solid #ddd', cursor: 'pointer' }" > <el-image :src="img" style="width: 60px; height: 60px; object-fit: cover" /> </div> </div> <!-- 预览弹窗 --> <el-dialog :visible.sync="dialogVisible" width="90%" top="5vh" > <div style="text-align: center"> <img :src="previewList[currentIndex]" style="max-width: 100%; max-height: 80vh; object-fit: contain" > <div style="margin-top: 20px"> <el-button @click="currentIndex = (currentIndex - 1 + previewList.length) % previewList.length"> 上一张 </el-button> <span style="margin: 0 20px">{{ currentIndex + 1 }} / {{ previewList.length }}</span> <el-button @click="currentIndex = (currentIndex + 1) % previewList.length"> 下一张 </el-button> </div> </div> </el-dialog> </div> </template> <script> export default { data() { return { currentIndex: 0, dialogVisible: false, previewList: [ "https://via.placeholder.com/800/ff0000", "https://via.placeholder.com/800/00ff00", "https://via.placeholder.com/800/0000ff" ] }; }, methods: { openPreview() { this.dialogVisible = true; } } }; </script> ``` #### 方案三:使用第三方预览库(推荐) ```vue <template> <div> <el-image :src="thumbnail" style="width: 200px" @click="showViewer = true" /> <vue-viewer v-if="showViewer" :images="previewList" :visible.sync="showViewer" @close="showViewer = false" /> </div> </template> <script> import VueViewer from 'v-viewer' import 'viewerjs/dist/viewer.css' Vue.use(VueViewer) export default { data() { return { showViewer: false, thumbnail: "https://via.placeholder.com/200", previewList: [ "https://via.placeholder.com/1200/ff0000", "https://via.placeholder.com/1200/00ff00" ] } } } </script> ``` --- ### 升级方案(推荐) 如果项目允许升级,最佳方案是升级到支持预览的版本: ```bash # 升级到最后一个支持Vue2的Element UI版本 npm install element-ui@2.15.14 ``` 升级后即可使用原生预览功能: ```vue <template> <el-image :src="thumbnail" :preview-src-list="previewList" style="width: 200px" /> </template> <script> export default { data() { return { thumbnail: "https://via.placeholder.com/200", previewList: [ "https://via.placeholder.com/1200" ] } } } </script> ``` --- ### 版本兼容性总结 | Element UI 版本 | 预览功能 | 解决方案 | |----------------|---------|---------| | < 2.13.0 | ❌ 不支持 | 自定义实现或使用第三方库 | | ≥ 2.13.0 | ✅ 支持 | 直接使用 `preview-src-list` | | 2.15.x (最新) | ✅ 支持 | 推荐升级到此版本 |
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值