Toast 轻提示

介绍

在页面中间弹出黑色半透明提示,用于消息通知、加载提示、操作结果提示等场景。

引入

通过以下方式来全局注册组件,更多注册方式请参考组件注册

  1. import { createApp } from 'vue';
  2. import { Toast } from 'vant';
  3. const app = createApp();
  4. app.use(Toast);

函数调用

为了便于使用 Toast,Vant 提供了一系列辅助函数,通过辅助函数可以快速唤起全局的 Toast 组件。

比如使用 showToast 函数,调用后会直接在页面中渲染对应的轻提示。

  1. import { showToast } from 'vant';
  2. showToast('提示内容');

代码演示

文字提示

  1. import { showToast } from 'vant';
  2. showToast('提示内容');

加载提示

使用 showLoadingToast 方法展示加载提示,通过 forbidClick 选项可以禁用背景点击。

  1. import { showLoadingToast } from 'vant';
  2. showLoadingToast({
  3. message: '加载中...',
  4. forbidClick: true,
  5. });

成功/失败提示

使用 showSuccessToast 方法展示成功提示,使用 showFailToast 方法展示失败提示。

  1. import { showSuccessToast, showFailToast } from 'vant';
  2. showSuccessToast('成功文案');
  3. showFailToast('失败文案');

自定义图标

通过 icon 选项可以自定义图标,支持传入图标名称或图片链接,等同于 Icon 组件的 name 属性

  1. import { showToast } from 'vant';
  2. showToast({
  3. message: '自定义图标',
  4. icon: 'like-o',
  5. });
  6. showToast({
  7. message: '自定义图片',
  8. icon: 'https://fastly.jsdelivr.net/npm/@vant/assets/logo.png',
  9. });

通过loadingType 属性可以自定义加载图标类型。

  1. import { showLoadingToast } from 'vant';
  2. showLoadingToast({
  3. message: '加载中...',
  4. forbidClick: true,
  5. loadingType: 'spinner',
  6. });

自定义位置

Toast 默认渲染在屏幕正中位置,通过 position 属性可以控制 Toast 展示的位置。

  1. import { showToast } from 'vant';
  2. showToast({
  3. message: '顶部展示',
  4. position: 'top',
  5. });
  6. showToast({
  7. message: '底部展示',
  8. position: 'bottom',
  9. });

文字换行方式

通过 wordBreak 选择可以控制 Toast 中的文字过长时的截断方式,默认值为 break-all,可选值为 break-wordnormal

  1. import { showToast } from 'vant';
  2. // 换行时截断单词
  3. showToast({
  4. message: 'This message will contain a incomprehensibilities long word.',
  5. wordBreak: 'break-all',
  6. });
  7. // 换行时不截断单词
  8. showToast({
  9. message: 'This message will contain a incomprehensibilities long word.',
  10. wordBreak: 'break-word',
  11. });

动态更新提示

执行 Toast 方法时会返回对应的 Toast 实例,通过修改实例上的 message 属性可以实现动态更新提示的效果。

  1. import { showLoadingToast, closeToast } from 'vant';
  2. const toast = showLoadingToast({
  3. duration: 0,
  4. forbidClick: true,
  5. message: '倒计时 3 秒',
  6. });
  7. let second = 3;
  8. const timer = setInterval(() => {
  9. second--;
  10. if (second) {
  11. toast.message = `倒计时 ${second} 秒`;
  12. } else {
  13. clearInterval(timer);
  14. closeToast();
  15. }
  16. }, 1000);

单例模式

Toast 默认采用单例模式,即同一时间只会存在一个 Toast,如果需要在同一时间弹出多个 Toast,可以参考下面的示例:

  1. import { showToast, showSuccessToast, allowMultipleToast } from 'vant';
  2. allowMultipleToast();
  3. const toast1 = showToast('第一个 Toast');
  4. const toast2 = showSuccessToast('第二个 Toast');
  5. toast1.close();
  6. toast2.close();

修改默认配置

通过 setToastDefaultOptions 函数可以全局修改 showToast 等方法的默认配置。

  1. import { setToastDefaultOptions, resetToastDefaultOptions } from 'vant';
  2. setToastDefaultOptions({ duration: 2000 });
  3. setToastDefaultOptions('loading', { forbidClick: true });
  4. resetToastDefaultOptions();
  5. resetToastDefaultOptions('loading');

使用 Toast 组件

如果需要在 Toast 内嵌入组件或其他自定义内容,可以直接使用 Toast 组件,并使用 message 插槽进行定制。使用前需要通过 app.use 等方式注册组件。

  1. <van-toast v-model:show="show" style="padding: 0">
  2. <template #message>
  3. <van-image :src="image" width="200" height="140" style="display: block" />
  4. </template>
  5. </van-toast>
  1. import { ref } from 'vue';
  2. export default {
  3. setup() {
  4. const show = ref(false);
  5. return { show };
  6. },
  7. };

API

方法

Vant 中导出了以下 Toast 相关的辅助函数:

方法名说明参数返回值
showToast展示提示ToastOptions | stringtoast 实例
showLoadingToast展示加载提示ToastOptions | stringtoast 实例
showSuccessToast展示成功提示ToastOptions | stringtoast 实例
showFailToast展示失败提示ToastOptions | stringtoast 实例
closeToast关闭提示closeAll: booleanvoid
allowMultipleToast允许同时存在多个 Toast-void
setToastDefaultOptions修改默认配置,影响所有的 showToast 调用。
传入 type 可以修改指定类型的默认配置
type | ToastOptionsvoid
resetToastDefaultOptions重置默认配置,影响所有的 showToast 调用。
传入 type 可以重置指定类型的默认配置
typevoid

ToastOptions 数据结构

调用 showToast 等方法时,支持传入以下选项:

参数说明类型默认值
type提示类型,可选值为 loading success
fail html
ToastTypetext
position位置,可选值为 top bottomToastPositionmiddle
message文本内容,支持通过\n换行string‘’
wordBreak文本内容的换行方式,可选值为 normal break-all break-wordToastWordBreak‘break-all’
icon自定义图标,支持传入图标名称或图片链接,等同于 Icon 组件的 name 属性string-
iconSize图标大小,如 20px 2em,默认单位为 pxnumber | string36px
iconPrefix图标类名前缀,等同于 Icon 组件的 class-prefix 属性stringvan-icon
overlay是否显示背景遮罩层booleanfalse
forbidClick是否禁止背景点击booleanfalse
closeOnClick是否在点击后关闭booleanfalse
closeOnClickOverlay是否在点击遮罩层后关闭booleanfalse
loadingType加载图标类型, 可选值为 spinnerstringcircular
duration展示时长(ms),值为 0 时,toast 不会消失number2000
className自定义类名string | Array | object-
overlayClass v3.0.4自定义遮罩层类名string | Array | object-
overlayStyle v3.0.4自定义遮罩层样式object-
onOpened完全展示后的回调函数Function-
onClose关闭时的回调函数Function-
transition动画类名,等价于 transitionname属性stringvan-fade
teleport指定挂载的节点,等同于 Teleport 组件的 to 属性string | Elementbody

Slots

使用 Toast 组件时,支持以下插槽:

名称说明
message自定义文本内容

类型定义

组件导出以下类型定义:

  1. import type {
  2. ToastType,
  3. ToastProps,
  4. ToastOptions,
  5. ToastPosition,
  6. ToastWordBreak,
  7. } from 'vant';

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件

名称默认值描述
—van-toast-max-width70%-
—van-toast-font-sizevar(—van-font-size-md)-
—van-toast-text-colorvar(—van-white)-
—van-toast-loading-icon-colorvar(—van-white)-
—van-toast-line-heightvar(—van-line-height-md)-
—van-toast-radiusvar(—van-radius-lg)-
—van-toast-backgroundfade(var(—van-black), 70%)-
—van-toast-icon-size36px-
—van-toast-text-min-width96px-
—van-toast-text-paddingvar(—van-padding-xs) var(—van-padding-sm)-
—van-toast-default-paddingvar(—van-padding-md)-
—van-toast-default-width88px-
—van-toast-default-min-height88px-
—van-toast-position-top-distance20%-
—van-toast-position-bottom-distance20%-

常见问题

引用 showToast 时出现编译报错?

如果引用 showToast 方法时出现以下报错,说明项目中使用了 babel-plugin-import 插件,导致代码被错误编译。

  1. These dependencies were not found:
  2. * vant/es/show-toast in ./src/xxx.js
  3. * vant/es/show-toast/style in ./src/xxx.js

Vant 从 4.0 版本开始不再支持 babel-plugin-import 插件,请参考 迁移指南 移除该插件。

Toast 轻提示 - 图1