Message 全局提示
用于轻量级即时反馈,通常由命令式方法触发。
基础用法
vue
<template>
<x-space>
<x-button type="primary" @click="showBasicMessage">成功提示</x-button>
<x-button @click="showInfoMessage">信息提示</x-button>
</x-space>
</template>
<script setup lang="ts">
import { Message } from 'x-next';
const showBasicMessage = () => Message.success('保存成功');
const showInfoMessage = () => Message.info('这是一条信息提示');
</script>消息类型
vue
<template>
<x-space wrap>
<x-button @click="showTypedMessage('info')">Info</x-button>
<x-button status="success" @click="showTypedMessage('success')">Success</x-button>
<x-button status="warning" @click="showTypedMessage('warning')">Warning</x-button>
<x-button status="danger" @click="showTypedMessage('error')">Error</x-button>
<x-button status="strong" @click="showTypedMessage('strong')">Strong</x-button>
<x-button @click="showTypedMessage('normal')">Normal</x-button>
<x-button type="primary" @click="showTypedMessage('loading')">Loading</x-button>
</x-space>
</template>
<script setup lang="ts">
import { Message } from 'x-next';
import type { IMessageType } from 'x-next';
const showTypedMessage = (type: IMessageType) => {
Message[type]({
message: `${type} message`,
duration: type === 'loading' ? 0 : 3000,
showClose: type === 'loading',
});
};
</script>可关闭和手动关闭
vue
<template>
<x-space>
<x-button @click="showCloseableMessage">可关闭</x-button>
<x-button @click="showManualMessage">手动关闭</x-button>
</x-space>
</template>
<script setup lang="ts">
import { Message } from 'x-next';
const showCloseableMessage = () => {
Message.info({
message: '点击右侧按钮关闭',
showClose: true,
duration: 0,
});
};
const showManualMessage = () => {
const handler = Message.loading({
message: '2 秒后手动关闭',
duration: 0,
});
window.setTimeout(() => handler.close(), 2000);
};
</script>更新内容
vue
<template>
<x-space>
<x-button type="primary" @click="showUpdatedMessage">更新同一条消息</x-button>
<x-button @click="clearMessages">清空消息</x-button>
</x-space>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { Message } from 'x-next';
const count = ref(1);
const showUpdatedMessage = () => {
Message.info({
id: 'message-update-demo',
message: `当前进度 ${count.value++}`,
duration: 3000,
showClose: true,
});
};
const clearMessages = () => Message.clear();
</script>位置和悬停
vue
<template>
<x-space>
<x-button @click="showTopMessage">顶部</x-button>
<x-button @click="showBottomMessage">底部</x-button>
<x-button @click="showHoverMessage">悬停暂停</x-button>
</x-space>
</template>
<script setup lang="ts">
import { Message } from 'x-next';
const showTopMessage = () => Message.info({ message: '顶部提示', position: 'top' });
const showBottomMessage = () => Message.success({ message: '底部提示', position: 'bottom' });
const showHoverMessage = () => {
Message.warning({
message: '鼠标移入时暂停自动关闭',
resetOnHover: true,
duration: 4000,
});
};
</script>自定义内容
vue
<template>
<x-space>
<x-button @click="showCustomIconMessage">自定义图标</x-button>
<x-button @click="showHtmlMessage">HTML 内容</x-button>
</x-space>
</template>
<script setup lang="ts">
import { h } from 'vue';
import { Message } from 'x-next';
const showCustomIconMessage = () => {
Message.info({
message: '自定义图标提示',
icon: () => h('span', { style: 'color: #ff7125;' }, '★'),
});
};
const showHtmlMessage = () => {
Message.warning({
message: '<strong>仅用于可信 HTML</strong>',
useHTML: true,
showClose: true,
});
};
</script>useHTML 会直接渲染 HTML 字符串。只应传入可信内容,用户输入或后端返回内容需要先自行消毒。
局部容器
vue
<template>
<x-button @click="showContainerMessage">显示到局部容器</x-button>
<div id="message-local-container" class="message-local-container"></div>
</template>
<script setup lang="ts">
import { Message } from 'x-next';
const showContainerMessage = () => {
Message.success({
message: '局部容器中的提示',
renderTo: '#message-local-container',
});
};
</script>按需导入
ts
import { Message } from 'x-next';Methods
| 方法 | 说明 | 参数 | 返回值 |
|---|---|---|---|
Message(options) | 显示一条提示 | IMessageOptions | IMessage | { close: () => void } |
Message.success(message) | 显示成功提示 | IMessage | IMessageOptions | { close: () => void } |
Message.error(message) | 显示错误提示 | IMessage | IMessageOptions | { close: () => void } |
Message.warning(message) | 显示警告提示 | IMessage | IMessageOptions | { close: () => void } |
Message.strong(message) | 显示强调提示 | IMessage | IMessageOptions | { close: () => void } |
Message.info(message) | 显示信息提示 | IMessage | IMessageOptions | { close: () => void } |
Message.loading(message) | 显示加载提示 | IMessage | IMessageOptions | { close: () => void } |
Message.normal(message) | 显示普通提示,默认无图标 | IMessage | IMessageOptions | { close: () => void } |
Message.clear(position?) | 清空消息 | 'top' | 'bottom' | void |
IMessageOptions
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
id | 提示唯一标识,相同 id 会更新已有消息 | string | number | - |
message | 提示内容 | string | number | VNode | RenderFunction | - |
content | message 的别名 | string | number | VNode | RenderFunction | - |
type | 提示类型 | 'success' | 'warning' | 'error' | 'strong' | 'info' | 'loading' | 'normal' | 'info' |
duration | 自动关闭时间,单位毫秒,0 表示不自动关闭 | number | 3000 |
center | 内容是否居中 | boolean | false |
onClose | 关闭回调 | (id?: string | number) => void | - |
offset | 与容器顶部或底部的初始偏移 | number | 20 |
renderTo | 挂载容器 | string | HTMLElement | 'body' |
showClose | 是否显示关闭按钮 | boolean | false |
closable | showClose 的别名 | boolean | false |
showIcon | 是否显示图标 | boolean | type !== 'normal' |
icon | 自定义图标 | RenderFunction | - |
useHTML | 是否按 HTML 渲染字符串内容 | boolean | false |
popupClass | 自定义类名 | string | - |
position | 展示位置 | 'top' | 'bottom' | 'top' |
resetOnHover | 鼠标悬停时暂停自动关闭 | boolean | false |
Types
ts
type IMessage = string | number | VNode | RenderFunction;
type IMessagePosition = 'top' | 'bottom';