You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue-toastification如何手动关闭通知?新通知弹出时移除旧通知

解决Vue-toastification手动关闭通知及自动移除旧通知的问题

手动关闭单个Toast的正确方式

Vue-toastification调用$toast.xxx()时会返回对应的toast实例,你需要保存这个实例,再调用它的close()方法才能生效——之前直接用toast.close()应该是没拿到正确的实例。示例:

// 保存toast实例
const myToast = this.$toast.info("Please hold on a moment, your file is being downloaded.");

// 任意时机手动关闭
myToast.close();

实现「新Toast弹出时自动移除第一个旧Toast」

要实现这个需求,只需要维护一个存储toast实例的队列,每次弹出新Toast前,检查队列是否有旧实例,关闭并移除第一个,再把新实例加入队列即可。

在组件里可以这么写:

export default {
  data() {
    return {
      toastQueue: [] // 用来存toast实例的队列
    };
  },
  methods: {
    showDownloadToast() {
      // 如果队列里有旧toast,先关闭第一个并移除
      if (this.toastQueue.length > 0) {
        this.toastQueue[0].close();
        this.toastQueue.shift();
      }
      // 创建新toast并加入队列
      const newToast = this.$toast.info("Please hold on a moment, your file is being downloaded.");
      this.toastQueue.push(newToast);
    }
  }
};

之后每次需要弹出通知时,调用this.showDownloadToast()就行,新通知弹出时最旧的那个会被立刻关闭,不用依赖固定超时时间。

为什么之前的close()/remove()没生效?

因为你没有获取到对应toast的实例对象——直接调用toast.close()是无效的,必须是调用this.$toast.info()(或其他类型)返回的具体实例,它才包含有效的close()方法。

内容的提问来源于stack exchange,提问作者jop frenken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:01:09