Notification 通知

悬浮出现在页面角落,显示全局的通知提醒消息。

基础用法

Element Plus 注册了 $notify 方法并且它接受一个 Object 作为其参数。 在最简单的情况下,你可以通过设置 titlemessage 属性来设置通知的标题和正文内容。 默认情况下,通知在4500毫秒后自动关闭,但你可以通过设置 duration 属性来自定义通知的展示时间。 如果你将它设置为 0,那么通知将不会自动关闭。 需要注意的是 duration 接收一个 Number,单位为毫秒。

Notification 通知 - 图1

  1. <template>
  2. <el-button plain @click="open1"> Closes automatically </el-button>
  3. <el-button plain @click="open2"> Won't close automatically </el-button>
  4. </template>
  5. <script lang="ts" setup>
  6. import { h } from 'vue'
  7. import { ElNotification } from 'element-plus'
  8. const open1 = () => {
  9. ElNotification({
  10. title: 'Title',
  11. message: h('i', { style: 'color: teal' }, 'This is a reminder'),
  12. })
  13. }
  14. const open2 = () => {
  15. ElNotification({
  16. title: 'Prompt',
  17. message: 'This is a message that does not automatically close',
  18. duration: 0,
  19. })
  20. }
  21. </script>

不同类型的通知

我们提供了四种不同类型的提醒框:success、warning、info 和error。

Element Plus 为 Notification 组件准备了四种通知类型:success, warning, info, error。 他们可以设置 type 字段来修改,除上述的四个值之外的值会被忽略。 同时,我们也为 Notification 的各种 type 注册了单独的方法,可以在不传入 type 字段的情况下像 open3open4 那样直接调用。

Notification 通知 - 图2

  1. <template>
  2. <el-button plain @click="open1"> Success </el-button>
  3. <el-button plain @click="open2"> Warning </el-button>
  4. <el-button plain @click="open3"> Info </el-button>
  5. <el-button plain @click="open4"> Error </el-button>
  6. </template>
  7. <script lang="ts" setup>
  8. import { ElNotification } from 'element-plus'
  9. const open1 = () => {
  10. ElNotification({
  11. title: 'Success',
  12. message: 'This is a success message',
  13. type: 'success',
  14. })
  15. }
  16. const open2 = () => {
  17. ElNotification({
  18. title: 'Warning',
  19. message: 'This is a warning message',
  20. type: 'warning',
  21. })
  22. }
  23. const open3 = () => {
  24. ElNotification({
  25. title: 'Info',
  26. message: 'This is an info message',
  27. type: 'info',
  28. })
  29. }
  30. const open4 = () => {
  31. ElNotification({
  32. title: 'Error',
  33. message: 'This is an error message',
  34. type: 'error',
  35. })
  36. }
  37. </script>

自定义消息弹出的位置

可以让 Notification 从屏幕四角中的任意一角弹出

使用 position 属性设置 Notification 的弹出位置, 支持四个选项:top-righttop-leftbottom-rightbottom-left, 默认为 top-right

Notification 通知 - 图3

  1. <template>
  2. <el-button plain @click="open1"> Top Right </el-button>
  3. <el-button plain @click="open2"> Bottom Right </el-button>
  4. <el-button plain @click="open3"> Bottom Left </el-button>
  5. <el-button plain @click="open4"> Top Left </el-button>
  6. </template>
  7. <script lang="ts" setup>
  8. import { ElNotification } from 'element-plus'
  9. const open1 = () => {
  10. ElNotification({
  11. title: 'Custom Position',
  12. message: "I'm at the top right corner",
  13. })
  14. }
  15. const open2 = () => {
  16. ElNotification({
  17. title: 'Custom Position',
  18. message: "I'm at the bottom right corner",
  19. position: 'bottom-right',
  20. })
  21. }
  22. const open3 = () => {
  23. ElNotification({
  24. title: 'Custom Position',
  25. message: "I'm at the bottom left corner",
  26. position: 'bottom-left',
  27. })
  28. }
  29. const open4 = () => {
  30. ElNotification({
  31. title: 'Custom Position',
  32. message: "I'm at the top left corner",
  33. position: 'top-left',
  34. })
  35. }
  36. </script>

有位置偏移的通知栏

能够设置偏移量来使 Notification 偏移默认位置。

Notification 提供设置偏移量的功能,通过设置 offset 字段,可以使弹出的消息距屏幕边缘偏移一段距离。 注意在同一时刻,每一个的 Notification 实例应当具有一个相同的偏移量。

Notification 通知 - 图4

  1. <template>
  2. <el-button plain @click="open"> Notification with offset </el-button>
  3. </template>
  4. <script lang="ts" setup>
  5. import { ElNotification } from 'element-plus'
  6. const open = () => {
  7. ElNotification.success({
  8. title: 'Success',
  9. message: 'This is a success message',
  10. offset: 100,
  11. })
  12. }
  13. </script>

使用 HTML 片段作为正文内容

message 支持传入 HTML 字符串来作为正文内容。

dangerouslyUseHTMLString 属性设置为 true,message 属性就会被当作 HTML 片段处理。

Notification 通知 - 图5

  1. <template>
  2. <el-button plain @click="open"> Use HTML String </el-button>
  3. </template>
  4. <script lang="ts" setup>
  5. import { ElNotification } from 'element-plus'
  6. const open = () => {
  7. ElNotification({
  8. title: 'HTML String',
  9. dangerouslyUseHTMLString: true,
  10. message: '<strong>This is <i>HTML</i> string</strong>',
  11. })
  12. }
  13. </script>

WARNING

message 属性虽然支持传入 HTML 片段,但是在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击 Notification 通知 - 图6 。 因此在 dangerouslyUseHTMLString 打开的情况下,请确保 message 的内容是可信的,永远不要将用户提交的内容赋值给 message 属性。

隐藏关闭按钮

通知的关闭按钮可以被设置为隐藏。

showClose 属性设置为 false 即可隐藏关闭按钮。

Notification 通知 - 图7

  1. <template>
  2. <el-button plain @click="open"> Hide close button </el-button>
  3. </template>
  4. <script lang="ts" setup>
  5. import { ElNotification } from 'element-plus'
  6. const open = () => {
  7. ElNotification.success({
  8. title: 'Info',
  9. message: 'This is a message without close button',
  10. showClose: false,
  11. })
  12. }
  13. </script>

全局方法

Element Plus 为 app.config.globalProperties 添加了全局方法 $notify。 因此在 Vue instance 中可以采用本页面中的方式调用 Notification

单独引用

  1. import { ElNotification } from 'element-plus'

你可以在对应的处理函数内调用 ElNotification(options) 来呼出通知栏。 我们也提前定义了多个 type 的单独调用方法,如 ElNotification.success(options)。 当你需要关闭页面上所有的通知栏的时候,可以调用 ElNotification.closeAll() 来关闭所有的实例。

应用程序上下文继承 > 2.0.4

现在 Notification 接受一条 context 作为消息构造器的第二个参数,允许你将当前应用的上下文注入到 Notification 中,这将允许你继承应用程序的所有属性。

你可以像这样使用它:

TIP

如果您全局注册了 ElNotification 组件,它将自动继承应用的上下文环境。

  1. import { getCurrentInstance } from 'vue'
  2. import { ElNotification } from 'element-plus'
  3. // 在你的 setup 方法中
  4. const { appContext } = getCurrentInstance()!
  5. ElNotification({}, appContext)

Notification 属性

属性说明类型可选值默认值
title标题string
message通知栏正文内容string/Vue.VNode
dangerouslyUseHTMLString是否将 message 属性作为 HTML 片段处理booleanfalse
type通知的类型stringsuccess/warning/info/error
icon自定义图标。 若设置了 type,则 icon 会被覆盖string | Component
custom-class自定义类名string
duration显示时间, 单位为毫秒。 值为 0 则不会自动关闭number4500
position自定义弹出位置stringtop-right/top-left/bottom-right/bottom-lefttop-right
show-close是否显示关闭按钮booleantrue
on-close关闭时的回调函数function
on-click点击 Notification 时的回调函数function
offset相对屏幕顶部的偏移量 偏移的距离,在同一时刻,所有的 Notification 实例应当具有一个相同的偏移量number0
appendTo设置通知栏在 DOM 中的亲元素string / HTMLElement-document.body
zIndex初始 zIndexnumber-0

Notification 方法

Notificationthis.$notify 都返回当前的 Notification 实例。 如果需要手动关闭实例,可以调用它的 close 方法。

方法名描述
close关闭当前的 Notification

源代码

组件 Notification 通知 - 图8 文档 Notification 通知 - 图9

贡献者

Notification 通知 - 图10 三咲智子

Notification 通知 - 图11 云游君

Notification 通知 - 图12 zz

Notification 通知 - 图13 JeremyWuuuuu

Notification 通知 - 图14 Aex

Notification 通知 - 图15 Xc

Notification 通知 - 图16 Delyan Haralanov

Notification 通知 - 图17 C.Y.Kun

Notification 通知 - 图18 kooriookami

Notification 通知 - 图19 btea

Notification 通知 - 图20 bqy

Notification 通知 - 图21 CodeSpikeX

Notification 通知 - 图22 xiejiahe

Notification 通知 - 图23 on the field of hope

Notification 通知 - 图24 Vgbire

Notification 通知 - 图25 Ryan2128

Notification 通知 - 图26 SMJ

Notification 通知 - 图27 Hades-li

Notification 通知 - 图28 SongWuKong