<template>
<Modal
:title="title"
v-model="isOpen">
<div v-html="html"></div>
<div v-html="content"></div>
</Modal>
</template>
<script>
export default {
name: "HtmlViewer",
props: {
title: String,
content: String
},
data() {
return {
isOpen: false,
html: ''
}
},
methods: {
open (html) {
this.isOpen = true
this.html = html
},
close () {
this.isOpen = false
this.$nextTick(() => {
this.$destroy(); // 销毁 Vue 实例
this.$el.parentNode && this.$el.parentNode.removeChild(this.$el); // 从 DOM 中移除元素
});
}
}
}
</script>
<style scoped>
</style>
为上面弹窗创建实例化方法
// myDialogFactory.js
import Vue from 'vue';
import Viewer from './HtmlViewer.vue';
export const HtmlViewerDialog = (title,content) => {
const DialogConstructor = Vue.extend(Viewer);
let instance = new DialogConstructor({
el: document.createElement('div'),
propsData: {
title,
content
}
});
// 挂载到 body 上,或者你可以选择挂载到 VueInstance.$el 上
document.body.appendChild(instance.$el);
return instance;
};