From 2830f4cacdb5a3d7ed26509176b85196dd858098 Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 9 Apr 2019 13:06:07 +0800 Subject: [PATCH] [bugfix] Dialog: can't show after being removed from document (#3111) --- packages/dialog/index.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/dialog/index.js b/packages/dialog/index.js index 1cd6c4547..4a12befd4 100644 --- a/packages/dialog/index.js +++ b/packages/dialog/index.js @@ -4,7 +4,11 @@ import { isServer } from '../utils'; let instance; -const initInstance = () => { +function initInstance() { + if (instance) { + instance.$destroy(); + } + instance = new (Vue.extend(VanDialog))({ el: document.createElement('div'), // avoid missing animation when first rendered @@ -16,16 +20,16 @@ const initInstance = () => { instance.$on('input', value => { instance.value = value; }); -}; +} -const Dialog = options => { +function Dialog(options) { /* istanbul ignore if */ if (isServer) { return Promise.resolve(); } return new Promise((resolve, reject) => { - if (!instance) { + if (!instance || !document.body.contains(instance.$el)) { initInstance(); } @@ -34,7 +38,7 @@ const Dialog = options => { reject }); }); -}; +} Dialog.defaultOptions = { value: true, @@ -79,11 +83,12 @@ Dialog.resetDefaultOptions = () => { Dialog.currentOptions = { ...Dialog.defaultOptions }; }; +Dialog.resetDefaultOptions(); + Dialog.install = () => { Vue.use(VanDialog); }; Vue.prototype.$dialog = Dialog; -Dialog.resetDefaultOptions(); export default Dialog;