Vue3封装函数组件(ElImageViewer)预览图片

目录结构

index.vue

html 复制代码
<template>
    <el-image-viewer v-if="show" v-bind="$attrs" hide-on-click-modal @close="show = false" />
</template>
 
<script setup>
import { ref, watch } from "vue"
import { ElImageViewer } from "element-plus" //自定义函数组件无法使用全局组件,需要单独引入

const props = defineProps({
    visible: {
        type: Boolean,
        default: false,
    },
    remove: {
        type: Function, //传入createApp中移除节点的方法
        default: null,
    },
    // api文档:https://element-plus.org/zh-CN/component/image.html#image-viewer-attributes
})

const show = ref(props.visible)
// 监听显示的消失,需要移除dom
watch(() => show.value, (val) => {
    !val && props.remove()
})
</script>

index.js

js 复制代码
import { createApp } from 'vue'
import index from './index.vue'

export default (options) => {
    // 创建一个节点,并将组件挂载上去
    const root = document.createElement('div')
    document.body.appendChild(root)

    const app = createApp(index, {
        ...options, visible: true, remove() {
            app.unmount(root) //创建完后要进行销毁
            document.body.removeChild(root)
        }
    })
    return app.mount(root)
}

使用方法在js||vue文件中

js 复制代码
import previewImage from "@/fcComponents/previewImage"
previewImage({ urlList: ["https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg"] })
相关推荐
布局呆星4 小时前
Vue3 | 组件通信学习小结
前端·vue.js
Ruihong7 小时前
你的 Vue 3 reactive(),VuReact 会编译成什么样的 React?
vue.js·面试
Ruihong7 小时前
你的 Vue 3 ref(),VuReact 会编译成什么样的 React?
vue.js·面试
一 乐7 小时前
酒店预订|基于springboot + vue酒店预订系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·酒店预订系统
嗜好ya7 小时前
解决 Vite 项目中 import.meta.env 变量为 undefined 的问题
前端·javascript·vue.js
浩星8 小时前
「Vue3 + Cesium 最佳实践」完整工程化方案
前端·javascript·vue.js
小李子呢02118 小时前
前端八股Vue(5)---v-if和v-show
前端·javascript·vue.js
YiuChauvin8 小时前
vue2中使用 AntV G6
javascript·vue.js
踩着两条虫9 小时前
目录:VTJ.PRO 在线应用开发平台技术揭秘
vue.js·低代码·ai编程
peak_chan10 小时前
通过vue-virtual-scroller封装虚拟滚动el-select
前端·javascript·vue.js