对话框(Dialog)

用于重要信息的告知或操作的反馈,并附带少量的选项供用户进行操作。需要用户处理事务,又不希望跳转页面以致打断工作流程时,可以使用 Modal 在当前页面正中打开一个浮层,承载相应的操作。

属性

属性

类型

必填

默认值

说明

direction

'vertical' | 'horizontal'

'vertical'

按钮排列方向

title

string

-

标题文字

content

string

-

内容文字

visible

boolean

false

是否可见,受控模式

duration

number

300

过渡动画时长,单位毫秒

maskClosable

boolean

true

点击蒙层关闭

disableScroll

boolean

true

弹窗展示时,是否禁止页面滚动

animation

boolean

true

是否开启过渡动画

zIndex

number

998

弹窗层级

className

string

-

类名

事件

事件名

说明

类型

onButtonTap

点击 Modal 组件内部按钮,触发回调

(index: number ) => void

onClose

组件关闭回调

() => void

插槽

名称

说明

default

弹窗内容

样式类

类名

说明

amd-dialog

整体样式

amd-dialog-vertical

整体样式

amd-dialog-horizontal

整体样式

amd-dialog-content

内容整体样式

amd-dialog-content-title

标题样式

amd-dialog-content-content

内容样式

amd-dialog-content-button-container

按钮区域样式

amd-dialog-content-button-container-vertical

按钮区域样式

amd-dialog-content-button-container-horizontal

按钮区域样式

amd-dialog-content-button

按钮样式

代码示例

基本使用

index.axml 的代码示例如下:

<view>
  <dialog
    content="人在天边月上明"
    buttonText="{{['我知道了']}}"
    visible="{{isNoBtnShow}}"
    onButtonTap="handleClose"
    onClose="handleClose">
  </dialog>
  <dialog
    content="人在天边月上明"
    buttonText="{{['我知道了']}}"
    visible="{{isMaskClosableShow}}"
    onButtonTap="handleClose"
    onClose="handleClose"
    maskClosable>
  </dialog>
  <dialog
    title="纵向"
    content="标题内容"
    buttonText="{{['长文案主操作', '更多','取消']}}"
    visible="{{isVerticalShow}}"
    direction="vertical"
    maskClosable="{{true}}"
    onClose="handleClose"
    onButtonTap="handleButtonTap">
  </dialog>

  <dialog
    title="横向"
    content="标题内容"
    buttonText="{{['辅助操作', '主操作']}}"
    visible="{{isHoriShow}}"
    maskClosable="{{true}}"
    direction="horizontal"
    onClose="handleClose"
    onButtonTap="handleButtonTap"/>

  <dialog
    title="自定义组件"
    content="标题内容"
    buttonText="{{['辅助操作', '主操作']}}"
    visible="{{isCusDialogShow}}"
    maskClosable="{{true}}"
    direction="horizontal"
    onClose="handleClose"
    onButtonTap="handleClose">
    <view class="input-container">
      <input-item placeholder="给朋友留言"></input-item>
    </view>
  </dialog>

  <dialog
    title="带大图"
    content="标题内容"
    buttonText="{{['辅助操作', '主操作']}}"
    imageSize="x-large"
    image="{{url}}" 
    visible="{{isLImgDialogShow}}" 
    maskClosable="{{true}}"
    direction="horizontal"
    onClose="handleClose"
    onButtonTap="handleClose"/>
  <demo-block title="基础用法">
    <view class="btn-list">
      <button  onTap="handleOpenNoBtn">最简单的小对话框</button>
      <button  onTap="handleOpenMaskClosable">点击遮罩关闭</button>
    </view>
  </demo-block>
  <demo-block title="操作按钮">
    <view class="btn-list">
      <button  onTap="handleOpenVertical">纵向</button>
      <button  onTap="handleOpenHori">横向</button>
    </view>
  </demo-block>
  <demo-block title="内容区域">
    <view class="btn-list">
      <button  onTap="handleOpenCus">自定义内容区域</button>
      <button  onTap="handleOpenLImg">带图</button>
    </view>
  </demo-block>
</view>

index.js 的代码示例如下:

Page({
  data: {
    isNoBtnShow: false,
    isMaskClosableShow: false,
    isVerticalShow: false,
    isHoriShow: false,
    isLImgDialogShow: false,
    isCusDialogShow: false,
    url: 'https://gw.alipayobjects.com/zos/rmsportal/yFeFExbGpDxvDYnKHcrs.png',
  },
  handleClose() {
    this.setData({
      isNoBtnShow: false,
      isMaskClosableShow: false,
      isVerticalShow: false,
      isHoriShow: false,
      isLImgDialogShow: false,
      isCusDialogShow: false,
    });
  },
  handleButtonTap(index) {
    my.alert({
      title: `点击了第${index + 1}个按钮`,
      complete: () => {
        this.handleClose();
      },
    });
  },
  handleOpenNoBtn() {
    this.setData({ isNoBtnShow: true });
  },
  handleOpenMaskClosable() {
    this.setData({ isMaskClosableShow: true });
  },
  handleOpenVertical() {
    this.setData({
      isVerticalShow: true,
    });
  },
  handleOpenHori() {
    this.setData({
      isHoriShow: true,
    });
  },
  handleOpenLImg() {
    this.setData({
      isLImgDialogShow: true,
    });
  },
  handleOpenCus() {
    this.setData({
      isCusDialogShow: true,
    });
  },
});

index.acss 的代码示例如下:

.deleteBtn {
  color: #f93a4a;
  font-weight: bolder;
}

.cancelBtn {
  color: #ccc;
}

.buttonBold,
.modalButtonBold .am-modal-footer {
  font-weight: bold;
}

.space {
  margin-top: 10px;
}

.slide {
  margin-top: 10px;
  padding-bottom: 10px;
}

.amd-input-item{
  border-color: #ccc;
}

.input-container{
  border: 1px solid #e5e5e5;
  padding: 8px 12px;
}

.a-input-content{
  font-size: 15px;
}

.a-input-placeholder{
  font-size:15px !important;
}

index.json 的代码示例如下:

{
  "usingComponents": {
    "dialog": "antd-mini/es/Dialog/index",
    "input-item": "antd-mini/es/InputItem/index",
    "button": "antd-mini/es/Button/index",
    "demo-block": "../../components/DemoBlock/index"
  }
}