預覽圖片的組件,通過Pina進行操作
將子組件在全局進行一次引用
//例如在 app.vue中引用
<template>
<imagePreview></imagePreview>
</template>
<script setup>
import imagePreview from '@/components/ImagePreviewClick/index.vue'
</script>
子組件ImagePreviewClick.vue
<template>
<div id="app" pageName="$route.name" v-if="showViewer">
<!--圖片預覽-->
<el-image-viewer style="z-index: 999999;" @close="closeViewer" :url-list="showViewerImages"
:initialIndex="initialIndex" />
</div>
</template>
<script setup name="eleImageViewer">
import { ElImageViewer } from 'element-plus'
import previewImage from '@/store/modules/previewImage'
import { watch } from 'vue';
const showViewer = computed(() => previewImage().showViewer);
const showViewerImages = computed(() => previewImage().showViewerImages);
const initialIndex = ref(0)
watch(showViewer, (val) => {
if (val) {
document.body.style.overflow = 'hidden';
}else{
document.body.style.overflow = 'auto';
}
})
// 預覽
const createPreview = (arrUrl)=> {
showViewerImages.value = arrUrl;
showViewer.value = true
}
//關(guān)閉
const closeViewer = ()=> {
previewImage().closeViewer()
// showViewer.value = false;
// showViewerImages.value = [];
}
defineExpose({ createPreview, closeViewer })
</script>
Pina: previewImage.js
const previewImage = defineStore(
'previewImage',
{
state: () => ({
showViewer: false,
showViewerImages:[]
}),
actions: {
createPreview(arrUrl) {
this.showViewerImages = arrUrl
this.showViewer = true
},
closeViewer() {
this.showViewer = false
this.showViewerImages = []
}
}
})
export default previewImage
父組件 index.vue
<script setup>
import previewImage from '@/store/modules/previewImage'
//預覽圖片
const url='圖片地址'
previewImage().createPreview([url])
</script >