导入image-viewer组件,并且声明相关变量以及操作方法
<el-image-viewer v-if="showPreview" :url-list="previewImages" @close="closeViewer"></el-image-viewer>
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
let isShow = ref(false)
const state = reactive({
showPreview: false,
previewImages: []
})
const closeViewer = () => {
state.showPreview = false
}
vue3中实例化组件,由于vue3中去掉了Vue.extend函数,所以只能通过createApp的方式来实例化
import PreviewItem from './Preview.vue'
import { createApp } from 'vue'
const app = createApp(PreviewItem)
const divEl = document.createElement('div')
document.body.appendChild(divEl)
const vm = app.mount(divEl)
const Preview = (img) => {
vm.showPreview = true
vm.previewImages = img
}
export default Preview
在main.js中app.config.globalProperties.$openPreview = Preview来挂载
vue2中实例化组件
import PreviewItem from "./Preview.vue";
const Preview = {};
// 注册
Preview.install = function(Vue) {
const PreviewConstructor = Vue.extend(PreviewItem);
const instance = new PreviewConstructor();
instance.$mount(document.createElement("div"));
document.body.appendChild(instance.$el);
/**
* 挂载在vue原型上
* @param {Array} imgs 需要预览的图片数组
*/
Vue.prototype.$openPreview = function(imgs = []) {
instance.showPreview = true;
instance.previewImages = imgs;
};
};
export default Preview;
main.js
导入组件
import Preview from ‘@/xxx/xxx/preview.js’
由于vue3中没有了Vue.extend函数,所以挂载方法也有区别:
//vue3中挂载
Object.assign(app.config.globalProperties, {
$openPreview: Preview
})
然后通过getCurrentInstance.appContext.config.globalProperties.$openPreview([url])调用
//vue2中注册
Vue.use(Preview)
通过vue.use()来注册组件然后通过this.$openPreview([url])调用