用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.hqwc.cn/news/418519.html

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

相关文章

MySQL主从集群

MySQL主从集群 主从模式、集群模式&#xff0c;都是在一个项目中使用多个mysql节点进行存储和读取数据。 当单机模式部署&#xff0c;不满足安全性、高可用、高并发等需求的时候&#xff0c;就需要考虑主从模式或者集群模式部署。 什么是主从模式&#xff1f; 主从模式&…

Hadoop基础知识

Hadoop基础知识 1、Hadoop简介 广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念——Hadoop生态圈。狭义上说&#xff0c;Hadoop指Apache这款开源框架&#xff0c;它的核心组件有&#xff1a; HDFS&#xff08;分布式文件系统&#xff09;&#xff1a;解决海量数据存储Y…

EasyRecovery2024数据恢复大师最新版本下载

EasyRecovery可以从初始化的磁盘恢复损坏或删除的文件。该软有易于使用&#xff0c;即使是最缺乏经验的用户也可以轻松恢复数据。一款威力非常强大的硬盘数据恢复工具。能够帮你恢复丢失的数据以及重建文件系统。EasyRecovery 不会向你的原始驱动器写入任何东东&#xff0c;它主…

Canny边缘检测 双阈值检测理解

问题引入 我们用一个实际例子来引入问题 import cv2 import numpy as npimgcv2.imread("test.png",cv2.IMREAD_GRAYSCALE) # 修改图像大小 show cv2.resize(img,(500,500))v1cv2.Canny(show,120,250) v2cv2.Canny(show,50,100)# 连接图像 res np.hstack((v1,v2)…

b+树的理解

二叉树&#xff1a; 每个节点支持两个分支的树结构&#xff0c;相比于单向链表&#xff0c;多了一个分支。 二叉查找树&#xff1a; 在二叉树的基础上增加了一个规则&#xff0c;左子树的所有节点都小于它的根节点&#xff0c;右子树的所有节点都大于他的根节点。 二叉查找树…

基于JavaWeb+SSM+Vue基于微信小程序的在线投稿系统的设计和实现

基于JavaWebSSMVue基于微信小程序的在线投稿系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1微信小程序 2 2.2 MYSQL数据库 3 2.3 u…

SpringSecurity+JWT前后端分离架构登录认证

目录 1. 数据库设计 2. 代码设计 登录认证过滤器 认证成功处理器AuthenticationSuccessHandler 认证失败处理器AuthenticationFailureHandler AuthenticationEntryPoint配置 AccessDeniedHandler配置 UserDetailsService配置 Token校验过滤器 登录认证过滤器接口配置…

linux网络协议栈2--网络包接收发送流程

上文我们讲了报文格式&#xff0c;应该对数据传输格式有了一定了解&#xff0c;这篇文章主要讲述的是网络包接收和发送的流程&#xff0c;主要是大方面来介绍。 网络包接收流程 当网络数据帧通过网络传输到达网卡时&#xff0c;网卡会将网络数据帧通过DMA的方式放到环形缓冲区…

本人最开始使用类GPT做的记录

最开始 最开始时用bing&#xff0c;改了header后可以使用&#xff0c;属于是身边人第一批使用的了&#xff0c;但是后来会报重定向错误&#xff0c;好像是因为微软做了反制措施&#xff0c;需要魔法才可以了然后我又找啊找啊&#xff0c;发现了chathub这个插件&#xff0c;用了…

超过GPT3.5?Mixtral 8*7B 模型结构分析

Datawhale干货 作者&#xff1a;宋志学&#xff0c;Datawhale成员 前言 2023年12月11日&#xff0c;Mistral AI团队发布了一款高质量的稀疏专家混合模型Mixtral 8x7B。 Mistral AI继续致力于向开发者社区提供最优秀的开放模型。在人工智能领域向前发展&#xff0c;需要采取超越…

AIGC - 视频生成模型的相关算法进展

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135688206 视频生成技术确实是一个很有潜力的颠覆性技术领域&#xff0c;可以作为企业创新梯队的重点关注方向&#xff0c;最近发展很快&#xff…

SaaS多租户篇

文章目录 1. 多租户是什么2. 技术组件2.1 如何实现多租户的DB封装2.2 如何实现多租户的redis封装2.3 如何实现多租户的Web和Security封装 1. 多租户是什么 2. 技术组件 2.1 如何实现多租户的DB封装 2.2 如何实现多租户的redis封装 2.3 如何实现多租户的Web和Security封装