首页 > web前端 > js教程 > 正文

自动清除 Phoenix LiveView 中的 Flash 消息

Susan Sarandon
发布: 2024-10-29 22:49:29
原创
496 人浏览过

Automatically clearing flash messages in Phoenix LiveView

Phoenix LiveView 是一种使用简单堆栈创建 Web 应用程序的绝佳且优雅的方式。它的生成器功能非常强大,可以通过简单的命令完成很多工作,但一直困扰我的一件事是闪现消息不会在几秒钟后自行消失。

为了解决这个问题,我创建了一个简单的钩子,它会在 5 秒后淡出消息,并从 LiveView 通道连接中清除 Flash 消息。让我们深入探讨一下!

// app.js
let liveSocket = new LiveSocket("/live", Socket, {
  // ...
  hooks: {
    AutoClearFlash: {
      mounted() {
        let ignoredIDs = ["client-error", "server-error"];
        if (ignoredIDs.includes(this.el.id)) return;

        let hideElementAfter = 5000; // ms
        let clearFlashAfter = hideElementAfter + 500; // ms

        // first hide the element
        setTimeout(() => {
          this.el.style.opacity = 0;
        }, hideElementAfter);

        // then clear the flash
        setTimeout(() => {
          this.pushEvent("lv:clear-flash");
        }, clearFlashAfter);
      },
    },
  },
});
登录后复制
# core_components.ex
def flash(assigns) do
  # ...
  phx-hook="AutoClearFlash"
  {@rest}
  # ...
end
登录后复制

由于“客户端错误”和“服务器错误”消息显示有关应用程序状态和连接的重要信息,我宁愿忽略它们。

第一步是设置一个超时,将消息的不透明度更改为 0,使消息从 UI 中消失。将其与过渡效果相结合,以获得更优雅的用户体验(在我的 Flash 消息中,我使用以下 Tailwind 类:transition-opacityuration-300)。

然后我们设置另一个超时,但这次是向服务器发送一个事件(“lv:clear-flash”)以清除 flash 消息。它会在隐藏消息超时后几毫秒触发,以便为过渡效果提供足够的时间来完成。

就是这样!

以上是自动清除 Phoenix LiveView 中的 Flash 消息的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!