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

T
explain  
tianyu 已提交
3 4
设置组件点击时弹出的气泡框状态。

H
geshi  
HelloCrease 已提交
5
>  **说明:**
T
fourth  
tianyu 已提交
6 7
>
>  从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
8

Z
zengyawen 已提交
9

T
fourth  
tianyu 已提交
10
## 接口
Z
zengyawen 已提交
11 12


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

T
fourth  
tianyu 已提交
17
## PopupOptions类型说明
Z
zengyawen 已提交
18

H
hebingxue 已提交
19 20 21 22 23 24 25 26
| 名称                      | 类型                                                | 必填    | 描述                                          |
| -------------------------| ------------------------------------------------| -----| ----------------------------------------- |
| message                  | string                                          | 是    | 弹窗信息内容。                                     |
| placementOnTop           | boolean                                         | 否    | 是否在组件上方显示,默认值为false。                  |
| arrowOffset<sup>9+</sup> | [Length](ts-types.md#length)                    | 否    | popup箭头在弹窗处的偏移。箭头在气泡上下方时,默认居左;箭头在气泡左右侧时,默认居上。      |
| 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            | (event:&nbsp;{&nbsp;isVisible:&nbsp;boolean&nbsp;})&nbsp;=&gt;&nbsp;void | 否    | 弹窗状态变化事件回调,参数isVisible为弹窗当前的显示状态。      |
T
fourth  
tianyu 已提交
27 28

## CustomPopupOptions<sup>8+</sup>类型说明
Z
zengyawen 已提交
29

H
hebingxue 已提交
30 31 32 33 34 35 36 37 38 39
| 名称                       | 类型                       | 必填     | 描述                                                 |
| -------------------------| ------------------------- | ---- | ---------------------------------------------------- |
| builder                  | [CustomBuilder](ts-types.md#custombuilder8)  | 是   | 提示气泡内容的构造器。                                          |
| placement                | [Placement](ts-appendix-enums.md#placement8) | 否   | 气泡组件优先显示的位置,当前位置显示不下时,会自动调整位置。<br/>默认值:Placement.Bottom     |
| arrowOffset<sup>9+</sup> | [Length](ts-types.md#length)                 | 否   | popup箭头在弹窗处的偏移。箭头在气泡上下方时,默认居左;箭头在气泡左右侧时,默认居上。          |
| maskColor                | [ResourceColor](ts-types.md#resourcecolor)  | 否   | 提示气泡遮障层的颜色。                                          |
| popupColor               | [ResourceColor](ts-types.md#resourcecolor)  | 否   | 提示气泡的颜色。                                               |
| enableArrow              | boolean                                      | 否   | 是否显示箭头。<br/>从API Version 9开始,如果箭头所在方位侧的气泡长度不足以显示下箭头,则会默认不显示箭头。比如:placement设置为Left,但气泡高度小于箭头的宽度(32vp),则实际不会显示箭头。<br/>默认值:true |
| autoCancel               | boolean                                      | 否   | 页面有操作时,是否自动关闭气泡<br/>默认值:true                        |
| onStateChange            | (event:&nbsp;{&nbsp;isVisible:&nbsp;boolean&nbsp;})&nbsp;=&gt;&nbsp;void | 否    | 弹窗状态变化事件回调,参数为弹窗当前的显示状态。 |
Z
zengyawen 已提交
40 41


Z
zengyawen 已提交
42
## 示例
Z
zengyawen 已提交
43

H
geshi  
HelloCrease 已提交
44 45
```ts
// xxx.ets
Z
zengyawen 已提交
46 47 48 49 50
@Entry
@Component
struct PopupExample {
  @State noHandlePopup: boolean = false
  @State handlePopup: boolean = false
Z
zengyawen 已提交
51 52 53 54 55
  @State customPopup: boolean = false

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

  build() {
Z
zengyawen 已提交
61
    Flex({ direction: FlexDirection.Column }) {
Z
zengyawen 已提交
62 63 64 65 66
      Button('no handle popup')
        .onClick(() => {
          this.noHandlePopup = !this.noHandlePopup
        })
        .bindPopup(this.noHandlePopup, {
Z
zengyawen 已提交
67
          message: 'content1 content1',
Z
zengyawen 已提交
68 69 70 71 72 73 74
          placementOnTop: false,
          onStateChange: (e) => {
            console.info(e.isVisible.toString())
            if (!e.isVisible) {
              this.noHandlePopup = false
            }
          }
Z
zengyawen 已提交
75 76
        })
        .position({ x: 100, y: 50 })
Z
zengyawen 已提交
77 78 79 80 81 82

      Button('with handle popup')
        .onClick(() => {
          this.handlePopup = !this.handlePopup
        })
        .bindPopup(this.handlePopup, {
Z
zengyawen 已提交
83
          message: 'content2 content2',
Z
zengyawen 已提交
84
          placementOnTop: true,
Z
zengyawen 已提交
85
          primaryButton: {
Z
zengyawen 已提交
86 87 88 89 90 91 92 93 94 95
            value: 'ok',
            action: () => {
              this.handlePopup = !this.handlePopup
              console.info('secondaryButton click')
            }
          },
          onStateChange: (e) => {
            console.info(e.isVisible.toString())
          }
        })
Z
zengyawen 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
        .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 已提交
115 116 117 118 119
    }.width('100%').padding({ top: 5 })
  }
}
```

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