Skip to content

Message 消息提示

常用于主动操作后的反馈提示,从页面顶部出现,自动消失。

基础用法

从顶部出现,3 秒后自动消失。Message 可以设置不同的类型,用来显示「成功、警告、消息、错误」类的操作反馈。

<script setup>
import { createMessage } from '@/components/Message/method'
import Button from '@/components/Button/Button.vue'

const showMessage = (type) => {
  createMessage({
    message: `这是一条${type}消息`,
    type
  })
}
</script>
<template>
  <div class="message-demo">
    <Button @click="showMessage('info')">信息提示</Button>
    <Button @click="showMessage('success')">成功提示</Button>
    <Button @click="showMessage('warning')">警告提示</Button>
    <Button @click="showMessage('danger')">错误提示</Button>
  </div>
</template>

<style scoped>
.message-demo {
  display: flex;
  justify-content: center;
  gap: 20px;
  padding: 20px 0;
}
</style>

可关闭的消息提示

可以添加关闭按钮。默认的 Message 是不可以被人工关闭的,如果需要可手动关闭的 Message,可以使用 showClose 属性。

<script setup>
import { createMessage } from '@/components/Message/method'
import Button from '@/components/Button/Button.vue'

const showMessage = (type) => {
  createMessage({
    message: '这条消息可以手动关闭',
    type,
    showClose: true
  })
}
</script>
<template>
  <div class="message-demo">
    <Button plain type="info" @click="showMessage('info')">显示可关闭的消息</Button>
    <Button plain type="primary" @click="showMessage('success')">显示可关闭的消息</Button>
    <Button plain type="warning" @click="showMessage('warning')">显示可关闭的消息</Button>
    <Button plain type="danger" @click="showMessage('danger')">显示可关闭的消息</Button>
  </div>
</template>

<style scoped>
.message-demo {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 10px;
  padding: 20px 0;
}
</style>

自定义显示时间

通过 duration 属性自定义消息显示时间。默认为 3000 毫秒,设为 0 则不会自动关闭。

<script setup>
import { createMessage } from '@/components/Message/method'
import Button from '@/components/Button/Button.vue'

const showMessage = () => {
  createMessage({
    message: '这条消息将在 10 秒后关闭',
    type: 'info',
    duration: 10000
  })
}
</script>
<template>
  <div class="message-demo">
    <Button @click="showMessage">显示较长时间的消息</Button>
  </div>
</template>

<style scoped>
.message-demo {
  display: flex;
  justify-content: center;
  padding: 20px 0;
}
</style>

使用 VNode

message 属性支持传入 VNode 来自定义消息内容。

<script setup>
import { h } from 'vue'
import { createMessage } from '@/components/Message/method'
import Button from '@/components/Button/Button.vue'
import Icon from '@/components/Icon/Icon.vue'

const showVNodeMessage = () => {
  createMessage({
    message: h('div', null, [
      h('span', { style: 'color: teal' }, '这是一条'),
      h(Icon, { icon: 'star', style: 'margin: 0 5px; color: gold' }),
      h('span', { style: 'color: teal' }, '自定义内容的消息')
    ]),
    type: 'success'
  })
}
</script>
<template>
  <div class="message-demo">
    <Button @click="showVNodeMessage">显示 VNode 消息</Button>
  </div>
</template>

<style scoped>
.message-demo {
  display: flex;
  justify-content: center;
  padding: 20px 0;
}
</style>

全局方法

V-Element 为 Vue.prototype 添加了全局方法 $message。因此在 Vue 实例中可以采用本页面中的方式调用 Message。

单独引用

javascript
import { createMessage } from "v-element";

此时调用方法为 createMessage(options)

Options

参数说明类型默认值
message消息文字string / VNode
type消息类型'success' / 'warning' / 'info' / 'danger''info'
duration显示时间,单位为毫秒。设为 0 则不会自动关闭number3000
showClose是否显示关闭按钮booleanfalse
offsetMessage 距离窗口顶部的偏移量number20

方法

调用 createMessage 会返回当前 Message 的实例。如果需要手动关闭实例,可以调用它的 destory 方法。

方法名说明
destory关闭当前的 Message

另外,还可以调用 closeAll 方法关闭所有的消息提示:

javascript
import { closeAll } from "v-element";

// 关闭所有消息
closeAll();