mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-08-10 14:39:45 +08:00
feat(Toast): support set default options of specfic type (#4848)
This commit is contained in:
parent
3784dd064e
commit
9ac81d6497
@ -101,6 +101,24 @@ toast1.clear();
|
||||
toast2.clear();
|
||||
```
|
||||
|
||||
### Set Default Options
|
||||
|
||||
The Toast default configuration can be globally modified with the `Toast.setDefaultOptions` function.
|
||||
|
||||
```js
|
||||
// Set the duration of all Toast to 2000 ms
|
||||
Toast.setDefaultOptions({ duration: 2000 });
|
||||
|
||||
// Set all loading types Toast to background unclickable
|
||||
Toast.setDefaultOptions('loading', { forbidClick: true });
|
||||
|
||||
// Reset default options of all Toast
|
||||
Toast.resetDefaultOptions();
|
||||
|
||||
// Reset default options of all loading Toast
|
||||
Toast.resetDefaultOptions('loading');
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### Methods
|
||||
@ -113,8 +131,8 @@ toast2.clear();
|
||||
| Toast.fail | `options | message` | toast instance | Show fail toast |
|
||||
| Toast.clear | `clearAll: boolean` | `void` | Close toast |
|
||||
| Toast.allowMultiple | - | `void` | Allow multlple toast at the same time |
|
||||
| Toast.setDefaultOptions | `options` | `void` | Set default options of all toasts |
|
||||
| Toast.resetDefaultOptions | - | `void` | Reset default options of all toasts |
|
||||
| Toast.setDefaultOptions | `type | options` | `void` | Set default options of all toasts |
|
||||
| Toast.resetDefaultOptions | `type` | `void` | Reset default options of all toasts |
|
||||
|
||||
### Options
|
||||
|
||||
|
@ -104,6 +104,24 @@ toast1.clear();
|
||||
toast2.clear();
|
||||
```
|
||||
|
||||
### 修改默认配置
|
||||
|
||||
通过`Toast.setDefaultOptions`函数可以全局修改 Toast 的默认配置
|
||||
|
||||
```js
|
||||
// 将所有 Toast 的展示时长设置为 2000 毫秒
|
||||
Toast.setDefaultOptions({ duration: 2000 });
|
||||
|
||||
// 将所有 loading Toast 设置为背景不可点击 (2.2.10 版本开始支持)
|
||||
Toast.setDefaultOptions('loading', { forbidClick: true });
|
||||
|
||||
// 重置所有 Toast 的默认配置
|
||||
Toast.resetDefaultOptions();
|
||||
|
||||
// 重置 loading Toast 的默认配置 (2.2.10 版本开始支持)
|
||||
Toast.resetDefaultOptions('loading');
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### 方法
|
||||
@ -116,8 +134,8 @@ toast2.clear();
|
||||
| Toast.fail | 展示失败提示 | `options | message` | toast 实例 |
|
||||
| Toast.clear | 关闭提示 | `clearAll: boolean` | `void` |
|
||||
| Toast.allowMultiple | 允许同时存在多个 Toast | - | `void` |
|
||||
| Toast.setDefaultOptions | 修改默认配置,对所有 Toast 生效 | `options` | `void` |
|
||||
| Toast.resetDefaultOptions | 重置默认配置,对所有 Toast 生效 | - | `void` |
|
||||
| Toast.setDefaultOptions | 修改默认配置,对所有 Toast 生效。<br>传入 type 可以修改指定类型的默认配置 | `type | options` | `void` |
|
||||
| Toast.resetDefaultOptions | 重置默认配置,对所有 Toast 生效。<br>传入 type 可以重置指定类型的默认配置 | `type` | `void` |
|
||||
|
||||
### Options
|
||||
|
||||
|
@ -22,6 +22,9 @@ const defaultOptions = {
|
||||
closeOnClick: false
|
||||
};
|
||||
|
||||
// default options of specific type
|
||||
let defaultOptionsMap = {};
|
||||
|
||||
let queue = [];
|
||||
let multiple = false;
|
||||
let currentOptions = {
|
||||
@ -76,29 +79,32 @@ function Toast(options = {}) {
|
||||
toast.updateZIndex();
|
||||
}
|
||||
|
||||
options = parseOptions(options);
|
||||
options = {
|
||||
...currentOptions,
|
||||
...parseOptions(options),
|
||||
clear() {
|
||||
toast.value = false;
|
||||
...defaultOptionsMap[options.type || currentOptions.type],
|
||||
...options
|
||||
};
|
||||
|
||||
if (options.onClose) {
|
||||
options.onClose();
|
||||
}
|
||||
options.clear = () => {
|
||||
toast.value = false;
|
||||
|
||||
if (multiple && !isServer) {
|
||||
toast.$on('closed', () => {
|
||||
clearTimeout(toast.timer);
|
||||
queue = queue.filter(item => item !== toast);
|
||||
if (options.onClose) {
|
||||
options.onClose();
|
||||
}
|
||||
|
||||
const parent = toast.$el.parentNode;
|
||||
if (parent) {
|
||||
parent.removeChild(toast.$el);
|
||||
}
|
||||
if (multiple && !isServer) {
|
||||
toast.$on('closed', () => {
|
||||
clearTimeout(toast.timer);
|
||||
queue = queue.filter(item => item !== toast);
|
||||
|
||||
toast.$destroy();
|
||||
});
|
||||
}
|
||||
const parent = toast.$el.parentNode;
|
||||
if (parent) {
|
||||
parent.removeChild(toast.$el);
|
||||
}
|
||||
|
||||
toast.$destroy();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@ -139,12 +145,21 @@ Toast.clear = all => {
|
||||
}
|
||||
};
|
||||
|
||||
Toast.setDefaultOptions = options => {
|
||||
Object.assign(currentOptions, options);
|
||||
Toast.setDefaultOptions = (type, options) => {
|
||||
if (typeof type === 'string') {
|
||||
defaultOptionsMap[type] = options;
|
||||
} else {
|
||||
Object.assign(currentOptions, type);
|
||||
}
|
||||
};
|
||||
|
||||
Toast.resetDefaultOptions = () => {
|
||||
currentOptions = { ...defaultOptions };
|
||||
Toast.resetDefaultOptions = type => {
|
||||
if (typeof type === 'string') {
|
||||
defaultOptionsMap[type] = null;
|
||||
} else {
|
||||
currentOptions = { ...defaultOptions };
|
||||
defaultOptionsMap = {};
|
||||
}
|
||||
};
|
||||
|
||||
Toast.allowMultiple = (value = true) => {
|
||||
|
@ -121,6 +121,15 @@ test('set default options', () => {
|
||||
expect(Toast().className).toEqual('');
|
||||
});
|
||||
|
||||
test('set default options by type', () => {
|
||||
const className = 'my-toast';
|
||||
Toast.setDefaultOptions('loading', { className });
|
||||
expect(Toast.loading().className).toEqual(className);
|
||||
expect(Toast.success().className).toEqual('');
|
||||
Toast.resetDefaultOptions();
|
||||
expect(Toast.loading().className).toEqual('');
|
||||
});
|
||||
|
||||
test('toast duration 0', () => {
|
||||
Toast.allowMultiple();
|
||||
const toast = Toast({
|
||||
|
Loading…
x
Reference in New Issue
Block a user