用el-image-viewer实现全局预览图片

背景

在后台管理系统中,一些预览图片的场景,通常都是使用 `el-image-viewer` 去实现,但是如果多个地方都需要预览图片,又要重复的去写 `el-image-viewer`  以及一些重复的和预览相关的代码。

可以把预览图片的组件放在根文件,把通用的预览相关的代码放在状态管理,哪里需要预览图片,就引入调用预览方法,让根组件的预览组件预览图片。

实现

1. 状态管理用的pinia,新建preview模块文件

// /stores/modules/preview.jsimport { defineStore } from "pinia";export const PreviewStore = defineStore({id: "PreviewStore",state: () => {return {// 记录图片预览数据imageViewer: {	show: false, // 控制图片的显现url: "", // 预览的图片路径close: () => {} // 关闭的回调方法}}},actions: {// 打开图片预览的弹窗openImageViewer({ url, close }: { url: string; close?: Function }) {this.imageViewer = {show: true,url,close: async () => {close && (await close());this.imageViewer.show = false;}};}}
});

2.对 el-image-viewer 进行了二次封装,增加了点击遮罩层关闭预览方法

// /components/modules/CImageViewer/index.vue<template><el-image-viewer v-bind="$attrs" :url-list="[`${baseUrl}${imageViewerUrl}`]" @close="imageViewerClose" />
</template>
<script setup lang="ts">
import { onMounted, ref, nextTick, onBeforeUnmount, computed } from "vue";
import { windowOrigin } from "@/utils/util";
import { PreviewStore } from "@/stores/modules/preview";const baseUrl = windowOrigin(); // 基础路径
const previewStore = PreviewStore();
const imageViewerUrl = computed(() => previewStore.imageViewer.url);
const imageViewerClose = computed(() => previewStore.imageViewer.close);
onMounted(() => {nextTick(() => {// 获取预览的遮罩层mask.value = document.querySelector(".el-image-viewer__mask") as HTMLDivElement;if (mask.value) {// 遮罩层增加点击事件,关闭预览mask.value.addEventListener("click", imageViewerClose.value);}});
});
onBeforeUnmount(() => {if (mask.value) {// 遮罩层增加点击事件,关闭预览previewStore.imageViewer.close();mask.value.removeEventListener("click", previewStore.imageViewer.close);}
});
</script>

3. 在根组件App.vue 使用 CImageViewer 预览图片组件

// App.vue<template>... 其他文件<!-- 全局的图片预览组件 --><c-image-viewer v-if="imageViewerVisible"></c-image-viewer>
</template><script setup lang="ts">
import { computed } from "vue";
import { PreviewStore } from "@/stores/modules/preview";import CImageViewer from "@/components/modules/CImageViewer/index.vue";const previewStore = PreviewStore();
// 控制图片预览组件显现的变量
const imageViewerVisible = computed(() => previewStore.imageViewer.show);</script>

4. 调用预览图片组件

// 需要预览图片的文件<template><div class="page"><imgclass="imgUrl"v-for="(url, index) in imageList(',')":key="index":src="url"@click="handlePicturePreview(url)"/></div>
</template>
<script setup lang="ts">
import { PreviewStore } from "@/stores/modules/preview";// ===========【 查看图片 】===========
const previewStore = PreviewStore();
const handlePicturePreview = (url: string) => {previewStore.openImageViewer({ url });
};
</script>

总结

其实就是把根组件的图片预览显现,和调用预览方法 都是交给状态管理控制的,这样就用el-image-viewer 实现全局预览图片的功能。

~~ End ~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/627294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyTinySTL 简单分析(一)--iterator.h

MyTinySTL 简单分析 目前在学习STL&#xff0c;看到一个开源的项目MyTinySTL&#xff0c;非常不错。想着照着这个代码自己敲一遍应该也能有些进步。然后就开始了学习过程。 首先分析的是vector 以下是由vector.h关联的所有头文件 其中有几个文件是重复的&#xff0c;例如type…

智能光栅光片显微成像技术的LabVIEW解决方案

智能光栅光片显微成像技术的LabVIEW解决方案 在生物医学研究中&#xff0c;高效的成像技术对于捕捉细胞内罕见和复杂事件至关重要。智能光栅光片显微技术&#xff08;smartLLSM&#xff09;的出现&#xff0c;代表了LabVIEW软件在高端成像领域的革命性应用&#xff0c;这项技术…

solr 远程命令执行漏洞复现 (CVE-2019-17558)

solr 远程命令执行漏洞复现 (CVE-2019-17558) ‍ 名称: solr 远程命令执行 (CVE-2019-17558) 描述: Apache Velocity是一个基于Java的模板引擎&#xff0c;它提供了一个模板语言去引用由Java代码定义的对象。Velocity是Apache基金会旗下的一个开源软件项目&#xff0c;旨在确…

Linux命令挂载硬盘

1. lsblk - 列出所有块设备及其相关信息&#xff0c;例如设备名称、大小、挂载点等。 2. parted /dev/sda - 打开磁盘分区工具parted&#xff0c;指定操作的设备为/dev/sda。 3. mkfs.xfs -f /dev/sda1 - 使用xfs文件系统格式化/dev/sda1分区&#xff0c;并强制执行。 4. mk…

Qt 快捷键设置

以 “在编辑时自动补齐”快捷键 为例&#xff1a; 位置&#xff1a;红色 搜索快捷键&#xff1a;蓝色 修改方式&#xff1a;绿色 快捷键&#xff1a;黄色

22k+star炒鸡好用的开源的网盘神器FileBrowser Docker自建个人网盘神器教程

目录 简介 1.拉取镜像 2.创建并启动容器 2.1创建目录 2.2启初始化一个容器用于导出配置文件和数据库&#xff0c;只挂载数据目录 2.3先将数据库文件和配置文件复制出来 2.4停止容器并删除容器 2.5创建完整的容器 3.愉快地使用 3.1示例&#xff1a; 3.2图片预览 3.3json…

基于Java SSM框架实现学生综合考评管理系统项目【项目源码+论文说明】

基于java的SSM框架实现学生学生综合考评管理系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 学生综合考评管理系统&#xff0c;主要的模块包括查看&#xff1b;管理员&#xff1b;个…

鸿蒙HarmonyOS实战-工具安装和Helloworld案例

&#x1f680;前言 HarmonyOS是华为自主开发的操作系统&#xff0c;它在2020年9月正式发布。它最初被称为鸿蒙OS&#xff0c;后来更名为HarmonyOS。HarmonyOS旨在提供一种可在各种设备上无缝运行的统一操作系统&#xff0c;包括智能手机、平板电脑、智能穿戴设备、智能音箱、车…

“核弹级“攻击队视角下的监管痛点解决方案

痛点分析及解决方案 一、辖区企业资产分散且不透明 - 传统的监管体系中&#xff0c;政府监管单位往往面临着辖区企业资产分散且不透明的问题。 - 企业无法梳理自身资产&#xff0c;上报的资产台账无法涵盖全部自身资产 - 监管单位精力有限&#xff0c;无法保证辖区企业资产台账…

工信部颁发的人工智能证书《自然语言与语音处理设计开发工程师》证书到手啦!

工信部颁发的人工智能证书《自然语言与语音处理设计开发工程师》证书拿到手啦&#xff01; 近期正在报考的工信部颁发的人工智能证书还有&#xff1a; 《计算机视觉处理设计开发工程师》中级 2024年1月24日至28日-北京 《自然语言与语音处理设计开发工程师》中级 第二期 20…

【华为OD机试真题 Python语言】466、寻找最优的路测线路 | 机试真题+思路参考+代码解析(C卷)

文章目录 一、题目🎃题目描述🎃输入输出🎃样例1🎃样例2二、思路参考三、问题解疑四、代码参考作者:KJ.JK🍂个人博客首页: KJ.JK 🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用Python语言进行更新解答,…

高级分布式系统-第15讲 分布式机器学习--分布式机器学习算法

高级分布式系统汇总&#xff1a;高级分布式系统目录汇总-CSDN博客 分布式机器学习算法 按照通信步调&#xff0c;大致可以分为同步算法和异步算法两大类。 同步算法下&#xff0c;通信过程中有一个显式的全局同步状态&#xff0c;称之为同步屏障。当工作节点运行到同步屏障 …

MySql编码设置

my.ini中配置&#xff1a; [client] default-character-setutf8[mysql] default-character-setutf8[mysqld] character-set-serverutf8 collation-serverutf8_general_ci #字符排序规则 skip-character-set-client-handshake #忽略客户端编码设置&#xff0c;强制客户端和服务…

定位Linux下写句柄错误问题

编写代码时发现对于以下can 写资源句柄时出现的错误不是很能分析&#xff0c;但是如果将错误码打印出来后&#xff0c;清晰了很多&#xff0c;并且还可以查看。 int Can::Write(const struct can_frame *send_frame) { int result;std::cout << "before write s_ :…

JUC——8锁问题

文章目录 问题一和问题二&#xff1a;问题三&#xff1a;问题四&#xff1a;问题五和问题六&#xff1a;问题七和问题八&#xff1a;总结 八锁现象是在多线程编程中经常遇到的一种情况&#xff0c;指的是在使用synchronized关键字进行同步时可能出现的不同的执行顺序。下面对问…

C++ 类的静态成员

我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时&#xff0c;这意味着无论创建多少个类的对象&#xff0c;静态成员都只有一个副本。 静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句&#xff0c;在创建第一个对象时&#xff0…

Springboot注解@order作用

目录 作用介绍 使用方式 注意点 作用介绍 Order 注解在 Spring 框架中用于定义组件的加载顺序。这个注解可以被应用于多个场景&#xff0c;其中包括但不限于&#xff1a; 定义 Bean 的加载顺序&#xff1a;在配置类中&#xff0c;你可以使用 Order 注解来指定 Spring 容器中…

windows下本地启动rocketmq

Windows下RocketMQ安装及可视化界面搭建 首先执行 mqnamesrv.cmd mqnamesrv.cmd -n localhost:9876再执行 mqbroker.cmd mqbroker.cmd -n localhost:9876 autoCreateTopicEnabletrue可视化 工具在置顶链接有下载地址。 需要修改配置文件 server.contextPath server.port80…

了解<![CDATA[ ]]>的使用

在一次查看testng的xml测试报告中发现有大量使用&#xff1c;![CDATA[ ]]&#xff1e;这个标签&#xff0c;所以就好奇这个标签是干什么用的。其实这个标签常见于xml文件中&#xff0c;是xml中一种特殊的标签&#xff0c;用于包含不需要解析的文本数据。下面我们深入了解&#…

vue3 vite使用postcss-px-to-viewport 实现页面自适应

一、什么是 postcss-px-to-viewport&#xff1f; postcss-px-to-viewport 是一个 PostCSS 插件&#xff0c;它可以将 px 单位转换为视口单位&#xff08;vw、vh 或 vmin&#xff09;。 视口单位是相对于视口尺寸来计算的长度单位&#xff0c;而不是相对于父元素或根元素。这意…