diff --git a/packages/dialog/index.js b/packages/dialog/index.js
index 4a12befd4..ccd6cf35d 100644
--- a/packages/dialog/index.js
+++ b/packages/dialog/index.js
@@ -1,6 +1,6 @@
 import Vue from 'vue';
 import VanDialog from './Dialog';
-import { isServer } from '../utils';
+import { isServer, isInDocument } from '../utils';
 
 let instance;
 
@@ -29,7 +29,7 @@ function Dialog(options) {
   }
 
   return new Promise((resolve, reject) => {
-    if (!instance || !document.body.contains(instance.$el)) {
+    if (!instance || !isInDocument(instance.$el)) {
       initInstance();
     }
 
diff --git a/packages/toast/index.js b/packages/toast/index.js
index 1c59815fd..28d2d5f62 100644
--- a/packages/toast/index.js
+++ b/packages/toast/index.js
@@ -1,6 +1,6 @@
 import Vue from 'vue';
 import VueToast from './Toast';
-import { isObj, isServer } from '../utils';
+import { isObj, isServer, isInDocument } from '../utils';
 
 const defaultOptions = {
   type: 'text',
@@ -19,7 +19,7 @@ const defaultOptions = {
 const parseOptions = message => (isObj(message) ? message : { message });
 
 let queue = [];
-let singleton = true;
+let multiple = false;
 let currentOptions = { ...defaultOptions };
 
 function createInstance() {
@@ -28,12 +28,13 @@ function createInstance() {
     return {};
   }
 
-  if (!queue.length || !singleton) {
+  if (!queue.length || multiple || !isInDocument(queue[0].$el)) {
     const toast = new (Vue.extend(VueToast))({
       el: document.createElement('div')
     });
     queue.push(toast);
   }
+
   return queue[queue.length - 1];
 }
 
@@ -56,7 +57,7 @@ function Toast(options = {}) {
         options.onClose();
       }
 
-      if (!singleton && !isServer) {
+      if (multiple && !isServer) {
         clearTimeout(toast.timer);
         queue = queue.filter(item => item !== toast);
 
@@ -97,7 +98,7 @@ Toast.clear = all => {
         toast.clear();
       });
       queue = [];
-    } else if (singleton) {
+    } else if (!multiple) {
       queue[0].clear();
     } else {
       queue.shift().clear();
@@ -113,8 +114,8 @@ Toast.resetDefaultOptions = () => {
   currentOptions = { ...defaultOptions };
 };
 
-Toast.allowMultiple = (allow = true) => {
-  singleton = !allow;
+Toast.allowMultiple = (value = true) => {
+  multiple = value;
 };
 
 Toast.install = () => {
diff --git a/packages/utils/index.ts b/packages/utils/index.ts
index 4f8b3a78a..92df1662c 100644
--- a/packages/utils/index.ts
+++ b/packages/utils/index.ts
@@ -44,3 +44,7 @@ export function isIOS(): boolean {
 export function range(num: number, min: number, max: number): number {
   return Math.min(Math.max(num, min), max);
 }
+
+export function isInDocument(element: HTMLElement): boolean {
+  return document.body.contains(element);
+}