mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
[bugfix] Toast: render error when use getContainer (#3115)
This commit is contained in:
parent
2830f4cacd
commit
b7b15fa183
@ -1,6 +1,6 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import VanDialog from './Dialog';
|
import VanDialog from './Dialog';
|
||||||
import { isServer } from '../utils';
|
import { isServer, isInDocument } from '../utils';
|
||||||
|
|
||||||
let instance;
|
let instance;
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ function Dialog(options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!instance || !document.body.contains(instance.$el)) {
|
if (!instance || !isInDocument(instance.$el)) {
|
||||||
initInstance();
|
initInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import VueToast from './Toast';
|
import VueToast from './Toast';
|
||||||
import { isObj, isServer } from '../utils';
|
import { isObj, isServer, isInDocument } from '../utils';
|
||||||
|
|
||||||
const defaultOptions = {
|
const defaultOptions = {
|
||||||
type: 'text',
|
type: 'text',
|
||||||
@ -19,7 +19,7 @@ const defaultOptions = {
|
|||||||
const parseOptions = message => (isObj(message) ? message : { message });
|
const parseOptions = message => (isObj(message) ? message : { message });
|
||||||
|
|
||||||
let queue = [];
|
let queue = [];
|
||||||
let singleton = true;
|
let multiple = false;
|
||||||
let currentOptions = { ...defaultOptions };
|
let currentOptions = { ...defaultOptions };
|
||||||
|
|
||||||
function createInstance() {
|
function createInstance() {
|
||||||
@ -28,12 +28,13 @@ function createInstance() {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!queue.length || !singleton) {
|
if (!queue.length || multiple || !isInDocument(queue[0].$el)) {
|
||||||
const toast = new (Vue.extend(VueToast))({
|
const toast = new (Vue.extend(VueToast))({
|
||||||
el: document.createElement('div')
|
el: document.createElement('div')
|
||||||
});
|
});
|
||||||
queue.push(toast);
|
queue.push(toast);
|
||||||
}
|
}
|
||||||
|
|
||||||
return queue[queue.length - 1];
|
return queue[queue.length - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +57,7 @@ function Toast(options = {}) {
|
|||||||
options.onClose();
|
options.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!singleton && !isServer) {
|
if (multiple && !isServer) {
|
||||||
clearTimeout(toast.timer);
|
clearTimeout(toast.timer);
|
||||||
queue = queue.filter(item => item !== toast);
|
queue = queue.filter(item => item !== toast);
|
||||||
|
|
||||||
@ -97,7 +98,7 @@ Toast.clear = all => {
|
|||||||
toast.clear();
|
toast.clear();
|
||||||
});
|
});
|
||||||
queue = [];
|
queue = [];
|
||||||
} else if (singleton) {
|
} else if (!multiple) {
|
||||||
queue[0].clear();
|
queue[0].clear();
|
||||||
} else {
|
} else {
|
||||||
queue.shift().clear();
|
queue.shift().clear();
|
||||||
@ -113,8 +114,8 @@ Toast.resetDefaultOptions = () => {
|
|||||||
currentOptions = { ...defaultOptions };
|
currentOptions = { ...defaultOptions };
|
||||||
};
|
};
|
||||||
|
|
||||||
Toast.allowMultiple = (allow = true) => {
|
Toast.allowMultiple = (value = true) => {
|
||||||
singleton = !allow;
|
multiple = value;
|
||||||
};
|
};
|
||||||
|
|
||||||
Toast.install = () => {
|
Toast.install = () => {
|
||||||
|
@ -44,3 +44,7 @@ export function isIOS(): boolean {
|
|||||||
export function range(num: number, min: number, max: number): number {
|
export function range(num: number, min: number, max: number): number {
|
||||||
return Math.min(Math.max(num, min), max);
|
return Math.min(Math.max(num, min), max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isInDocument(element: HTMLElement): boolean {
|
||||||
|
return document.body.contains(element);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user