shop-wx/doc/wot-design-uni/docs/component/popover.md

160 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Popover 气泡
常用于展示提示信息。
## 基本用法
Popover 的属性与 [Tooltip](/component/tooltip.html) 很类似,因此对于重复属性,请参考 [Tooltip](/component/tooltip.html) 的文档,在此文档中不做详尽解释。
因为`uni-app`组件无法监听点击自己以外的地方,为了在点击页面其他地方时,可以自动关闭 `popover` ,建议使用组件库的 `useQueue` hook会关闭所有 dropmenu、popover、toast、swipeAction、fab在页面的根元素上监听点击事件的冒泡。
:::warning
如果存在用户手动点击 `popover` 以外某个地方如按钮弹出 `popover` 的场景,则需要在点击的元素(在这里上按钮)加上 click 阻止事件冒泡到根元素上,避免触发 `closeOutside` 把要手动打开的 `popover` 关闭了。
:::
```html
<view @click="closeOutside">
<wd-popover content="这是一段信息。" @change="handleChange">
<wd-button>点击展示</wd-button>
</wd-popover>
</view>
```
```typescript
import { useQueue } from '@/uni_modules/wot-design-uni'
const { closeOutside } = useQueue()
function handleChange({ show }) {
console.log(show)
}
```
## 模式 mode
使用 `mode` 属性控制当前文字提示的展示模式。`mode` 可选参数为 `normal` / `menu`
- **normal**(普通文字模式):
-`mode` 处于默认状态,`content` 属性传入要显示的 `String` 字符串。
- **menu**(列表模式):
- 文字提示框会展示成列表形式,此时 `content` 属性传入 `Array` 类型,数组内对象数据结构如下方列表所示。
- 绑定事件 `menuclick`,在选择结束后,执行操作,列表关闭。
列表模式下 `content` 数组内对象的数据结构:
| 键名 | 说明 | 类型 | 是否必填 | 最低版本 |
| ------------------------------------- | ------ | ------ | -------- | -------- |
| content | 选项名 | string | 是 | - |
| iconClass不设置该属性时只展示标题 | 选项值 | string | 否 | - |
**注意iconClass 属性值为组件库内部的 icon 图标名。**
```html
<wd-popover mode="menu" :content="menu" @menuclick="link" @change="handleChange">
<wd-button>列表</wd-button>
</wd-popover>
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const menu = ref<Array<Record<string, any>>>([
{
iconClass: 'read',
content: '全部标记已读'
},
{
iconClass: 'delete',
content: '清空最近会话'
},
{
iconClass: 'detection',
content: '消息订阅设置'
},
{
iconClass: 'subscribe',
content: '消息异常检测'
}
])
function link(e) {
toast.show('选择了' + e.item.content)
}
```
## 嵌套信息
开启属性 `use-content-slot`,使用插槽 `content` 可以在 Popover 中嵌套多种类型信息。
:::warning 注意
目前使用`content`插槽时,组件内部无法正确获取气泡的宽高,此时设置偏移的`placement`无法生效,例如`bottom-end`。
:::
```html
<wd-popover use-content-slot>
<template #content>
<view class="pop-content">这是一段自定义样式的内容。</view>
</template>
<wd-button>点击展示</wd-button>
</wd-popover>
```
```scss
.pop-content {
/* 必填 开始 */
position: relative;
z-index: 500;
border-radius: 4px;
/* 必填 结束 */
background: #fff;
color: #8268de;
font-weight: bolder;
padding: 10px;
width: 150px;
}
```
## Popover Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | ------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | ------ | -------- |
| v-model | 手动状态是否可见 | boolean | - | false | - |
| content | 显示的内容,也可以通过 `slot#content` 传入 | string/array当模式为菜单模式时content 属性格式为 Array | - | - | - |
| mode | 当前显示的模式,决定内容的展现形式 | string | normal普通模式/ menu菜单模式 | normal | - |
| placement | popover 的出现位置 | string | top / top-start / top-end / bottom / bottom-start / bottom-end / left / left-start / left-end / right / right-start / right-end | bottom | - |
| visible-arrow | 是否显示 popover 箭头 | boolean | - | true | - |
| disabled | popover 是否可用 | boolean | - | false | - |
| offset | 出现位置的偏移量 | number | - | 0 | - |
## Slot
| name | 说明 | 最低版本 |
| ------- | ------------------------ | -------- |
| content | 多行内容或用户自定义样式 | - |
## Events
| 事件名称 | 说明 | 回调参数 | 最低版本 |
| -------------- | --------------------------- | ----------------- | -------- |
| open | 显示时触发 | - | - |
| close | 隐藏时触发 | - | - |
| change | pop 显隐值变化时触发 | - | - |
| menuclick | menu 模式下点击某一选项触发 | `{ item, index }` | - |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ---- | -------- |
| open | 打开文字提示弹框 | - | - |
| close | 关闭文字提示弹框 | - | - |
## Popover 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ------------ | -------- |
| custom-class | 根节点样式 | - |
| custom-arrow | 尖角样式 | - |
| custom-pop | 文字提示样式 | - |