ts-universal-attributes-popup.md 5.0 KB
Newer Older
Z
zengyawen 已提交
1
# Popup控制
Z
zengyawen 已提交
2

Z
zengyawen 已提交
3 4
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
5

Z
zengyawen 已提交
6 7

## 权限列表
Z
zengyawen 已提交
8 9 10 11




Z
zengyawen 已提交
12
## 属性
Z
zengyawen 已提交
13

Z
zengyawen 已提交
14

Z
zengyawen 已提交
15 16
| 名称 | 参数类型 | 默认值 | 描述 |
| -------- | -------- | -------- | -------- |
K
kukixi 已提交
17
| bindPopup | show:&nbsp;boolean,<br/>popup:&nbsp;PopupOptions\|&nbsp;CustomPopupOptions | - | 给组件绑定Popup,点击弹出弹窗。<br/>show:&nbsp;创建页面弹窗提示是否默认显示,默认值为false。<br/>popup:&nbsp;配置当前弹窗提示的参数。 |
Z
zengyawen 已提交
18 19


K
kukixi 已提交
20
- PopupOptions类型接口说明
Z
zengyawen 已提交
21 22 23 24 25 26 27
  | 名称 | 类型 | 必填 | 默认值 | 描述 | 
  | -------- | -------- | -------- | -------- | -------- |
  | message | string | 是 | - | 弹窗信息内容。 | 
  | placementOnTop | boolean | 否 | false | 是否在组件上方显示,默认值为false。 | 
  | primaryButton | {<br/>value:&nbsp;string,<br/>action:&nbsp;()&nbsp;=&gt;&nbsp;void<br/>} | 否 | - | 第一个按钮。<br/>value:&nbsp;弹窗里主按钮的文本。<br/>action:&nbsp;点击主按钮的回调函数。 | 
  | secondaryButton | {<br/>value:&nbsp;string,<br/>action:&nbsp;()&nbsp;=&gt;&nbsp;void<br/>} | 否 | - | 第二个按钮。<br/>value:&nbsp;弹窗里辅助按钮的文本。<br/>action:&nbsp;点击辅助按钮的回调函数。 | 
  | onStateChange | (isVisible:&nbsp;boolean)&nbsp;=&gt;&nbsp;void | 否 | - | 弹窗状态变化事件回调,参数isVisible为弹窗当前的显示状态。 | 
Z
zengyawen 已提交
28

K
kukixi 已提交
29
- CustomPopupOptions<sup>8+</sup>类型接口说明
Z
zengyawen 已提交
30 31 32 33 34 35 36 37 38
  | 名称 | 类型 | 必填 | 默认值 | 描述 |
  | -------- | -------- | -------- | -------- | -------- |
  | builder | ()&nbsp;=&gt;&nbsp;any | 是 | - | 提示气泡内容的构造器。 |
  | placement | Placement | 否 | Placement.Bottom | 气泡组件优先显示的位置,当前位置显示不下时,会自动调整位置。 |
  | maskColor | [Color](../../ui/ts-types.md#颜色类型) | 否 | - | 提示气泡遮障层的颜色。 |
  | popupColor | [Color](../../ui/ts-types.md#颜色类型) | 否 | - | 提示气泡的颜色。 |
  | enableArrow | boolean | 否 | true | 是否显示箭头,只有上、下方向的气泡会显示箭头。 |
  | autoCancel | boolean | 否 | true | 页面有操作时,是否自动关闭气泡 |
  | onStateChange | (isVisible:&nbsp;boolean)&nbsp;=&gt;&nbsp;void | 否 | - | 弹窗状态变化事件回调,参数为弹窗当前的显示状态。 |
Z
zengyawen 已提交
39

40
- Placement<sup>8+</sup>枚举说明
Z
zengyawen 已提交
41 42 43 44 45 46 47 48 49 50
  | 名称 | 描述 | 
  | -------- | -------- |
  | Left | 气泡提示位于组件左侧。 | 
  | Right | 气泡提示位于组件右侧。 | 
  | Top | 气泡提示位于组件上侧。 | 
  | Bottom | 气泡提示位于组件下侧。 | 
  | TopLeft | 气泡提示位于组件左上角。 | 
  | TopRight | 气泡提示位于组件右上角。 | 
  | BottomLeft | 气泡提示位于组件左下角。 | 
  | BottomRight | 气泡提示位于组件右下角。 | 
Z
zengyawen 已提交
51 52


Z
zengyawen 已提交
53
## 示例
Z
zengyawen 已提交
54 55 56 57 58 59 60

```
@Entry
@Component
struct PopupExample {
  @State noHandlePopup: boolean = false
  @State handlePopup: boolean = false
Z
zengyawen 已提交
61 62 63 64 65 66 67 68
  @State customPopup: boolean = false

  @Builder popupBuilder() {
    Row({ space: 2 }) {
      Image('/resource/ic_public_thumbsup.svg').width(24).height(24).margin({ left: -5 })
      Text('Custom Popup').fontSize(12)
    }.width(100).height(50).backgroundColor(Color.White)
  }
Z
zengyawen 已提交
69 70

  build() {
Z
zengyawen 已提交
71
    Flex({ direction: FlexDirection.Column }) {
Z
zengyawen 已提交
72 73 74 75 76
      Button('no handle popup')
        .onClick(() => {
          this.noHandlePopup = !this.noHandlePopup
        })
        .bindPopup(this.noHandlePopup, {
Z
zengyawen 已提交
77
          message: 'content1 content1',
Z
zengyawen 已提交
78 79 80 81 82 83 84
          placementOnTop: false,
          onStateChange: (e) => {
            console.info(e.isVisible.toString())
            if (!e.isVisible) {
              this.noHandlePopup = false
            }
          }
Z
zengyawen 已提交
85 86
        })
        .position({ x: 100, y: 50 })
Z
zengyawen 已提交
87 88 89 90 91 92

      Button('with handle popup')
        .onClick(() => {
          this.handlePopup = !this.handlePopup
        })
        .bindPopup(this.handlePopup, {
Z
zengyawen 已提交
93
          message: 'content2 content2',
Z
zengyawen 已提交
94
          placementOnTop: true,
Z
zengyawen 已提交
95
          primaryButton: {
Z
zengyawen 已提交
96 97 98 99 100 101 102 103 104 105
            value: 'ok',
            action: () => {
              this.handlePopup = !this.handlePopup
              console.info('secondaryButton click')
            }
          },
          onStateChange: (e) => {
            console.info(e.isVisible.toString())
          }
        })
Z
zengyawen 已提交
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
        .position({ x: 100, y: 200 })

      Button('custom popup')
        .onClick(() => {
          this.customPopup = !this.customPopup
        })
        .bindPopup(this.customPopup, {
          builder: this.popupBuilder,
          placement: Placement.Bottom,
          maskColor: 0x33000000,
          popupColor: Color.White,
          enableArrow: true,
          onStateChange: (e) => {
            if (!e.isVisible) {
              this.customPopup = false
            }
          }
        })
        .position({ x: 100, y: 350 })
Z
zengyawen 已提交
125 126 127 128 129
    }.width('100%').padding({ top: 5 })
  }
}
```

Z
zengyawen 已提交
130
![zh-cn_image_0000001187055946](figures/zh-cn_image_0000001187055946.gif)