Skip to content

Menu 菜单

查看 sn-menu 的 2.0 版本差异

基础用法

  • 锚点菜单组件,在触发元素(按钮、图标等)旁弹出的一组操作选项,常用于"更多操作"场景。
  • 弹出层类组件,必须直接放在 sn-page 根节点下使用,否则主题颜色与动画时长等 CSS 变量无法作用到组件内部。
  • 选项由 items 数组驱动,每项支持 text(文字)、icon(图标名)、value(右侧内容)、color(文字颜色,支持 $ 简写)、disabled(禁用)字段。
  • target 传入锚点元素的选择器(如 #menu-btn),菜单自动定位到锚点下方;下方空间不足时自动改为在锚点上方弹出,三角箭头方向随之翻转;align 设置菜单相对锚点的对齐方式。
  • 通过 v-model:show 控制显示与隐藏;点击菜单项触发 select 事件(携带索引与选项数据)并自动关闭。
  • overlay 可关闭遮罩,close-on-click-overlay 可设置点击遮罩不关闭,overlay-opacityoverlay-styleoverlay-class 自定义遮罩。
vue
<template>
	<sn-page>
		<sn-button id="menu-btn" text="打开菜单" @click="show = true"></sn-button>
		<sn-menu v-model:show="show" target="#menu-btn" :items="items"
			@select="onSelect"></sn-menu>
	</sn-page>
</template>

<script lang="uts" setup>
import type { SnDataItem } from '@/uni_modules/sinle-ui/core/types/index.uts'

const show = ref<boolean>(false)
const items: SnDataItem[] = [
	{ text: '编辑', icon: 'edit-line' },
	{ text: '分享', icon: 'share-line' },
	{ text: '删除', icon: 'delete-bin-line' }
]

function onSelect(index: number, item: SnDataItem): void {
	console.log(item.text)
}
</script>

更多演示请下载 demo 查看

对齐方式与箭头

vue
<template>
	<sn-menu v-model:show="show" target="#menu-btn" align="center"
		:width="220" :show-arrow="false" :items="items"></sn-menu>
</template>

<script lang="uts" setup>
const show = ref<boolean>(false)
const items: SnDataItem[] = [
	{ text: '选项一' },
	{ text: '选项二' }
]
</script>

属性

参数说明类型默认值可选值
v-model:show菜单显示状态绑定值Booleanfalsetrue | false
target锚点元素选择器(如 #menu-btn),菜单将定位到该元素旁String''-
align菜单相对锚点的对齐方式Stringleftleft | center | right
items菜单项数组,每项支持 texticonvaluecolordisabled 字段Array<SnDataItem>[]-
width菜单宽度(px),为空时为 160pxString | Number''-
zIndex弹出层层级Number999-
showArrow是否显示指向锚点的三角箭头Booleantruetrue | false
overlay是否显示遮罩Booleantruetrue | false
overlayOpacity遮罩透明度,overlayfalse 时不显示遮罩Number0.3-
overlayStyle自定义遮罩样式UTSJSONObject | String''-
overlayClass遮罩外部类String''-
menuStyle自定义菜单容器样式UTSJSONObject | String''-
menuClass菜单容器外部类String''-
aniTime显示 / 关闭动画时长(ms),支持 $ 简写String | Number200-
cellStyle自定义菜单项样式(透传内部 sn-cell)UTSJSONObject | String''-
cellClass菜单项外部类(透传内部 sn-cell)String''-
cellBorder是否显示菜单项之间的分隔线Booleantruetrue | false
closeOnClickOverlay点击遮罩时是否关闭菜单Booleantruetrue | false

通用数据项类型,全局弹窗操作菜单与多数列表类组件共用(组件侧详见组件类型)。

字段类型必备描述
idString项 id
textString显示文本
iconString图标名
valueString关联值
colorString文本颜色
disabledBoolean是否禁用

事件

名称类型说明
update:show(value: boolean) => Void菜单显示状态变化时触发,配合 v-model:show 使用
select(index: number, item: SnDataItem) => Void点击菜单项时触发,参数为索引与所选菜单项,随后自动关闭
clickoverlay() => Void点击遮罩时触发
beforeenter() => Void入场动画开始前触发
enter() => Void入场动画开始时触发
afterenter() => Void入场动画结束后触发
beforeleave() => Void离场动画开始前触发
leave() => Void离场动画开始时触发
afterleave() => Void离场动画结束后触发

使用 MIT 协议