torn-weex-flymeui
Version:
A Flyme Style UI library based on Weex for Creator.
171 lines (144 loc) • 6.39 kB
Markdown
# fm-dialog
> Flyme 弹框组件
!> 注意:组件仅为未完成的 beta 版本,使用方法有可能会变更。
## TODO
* [ ] 修复 Creator 上无法通过 JS 使用弹框的问题
<br/>
<img src="http://image.res.meizu.com/image/flyme-icon/dd5cd5bebc414beb8cf385b528131fb2z" width=400 style="box-shadow: 0 5px 10px 0 #d9dce3; border-radius: 4px;" />
## 使用方法
```vue
<template>
<div class="mzui-demo">
<fm-button class="btn" @buttonClicked="click1">确认弹框</fm-button>
<fm-button class="btn" @buttonClicked="click2">警告弹框</fm-button>
<!-- 使用 JS 弹出弹框,在 Creator 中暂不支持 -->
<fm-button class="btn" @buttonClicked="click3">js 弹出对话框</fm-button>
<fm-button class="btn" @buttonClicked="click3">js 弹出警告框</fm-button>
<!-- 确认弹框 -->
<fm-dialog :show="confirmShow"
title="退出浏览器并清空历史记录"
content="退出浏览器并清空历史记录弹框内容区域此处展示描述"
@fmDialogBtnClicked="btnClick"
@fmDialogDisappeared="dialogOverlayClick"
:can-auto-close="true"></fm-dialog>
<!-- 警告弹框 -->
<fm-dialog :show="alertShow"
title="退出浏览器并清空历史记录"
content="退出浏览器并清空历史记录弹框内容区域此处展示描述"
@fmDialogBtnClicked="btnClick"
@fmDialogDisappeared="dialogOverlayClick"
:can-auto-close="true"></fm-dialog>
</div>
</template>
<script>
import { FmDialog, confirm, alert } from 'weex-flymeui';
const modal = weex.requireModule('modal');
export default {
components: { FmDialog },
data: () => ({
confirmShow: false,
alertShow: false,
}),
methods: {
click1 () {
this.confirmShow = true;
},
click2 () {
this.alertShow = true;
},
click3 () {
confirm({
title: '这是 js 调用弹出的弹框',
message: '用户操作后返回的是一个 Promise 对象,可自行做处理。弹框的取消以及确定字体可以通过 cancelText 以及 confirmText 属性进行更改'
}).then(() => {
modal.toast({ message: '确定' });
}, () => {
modal.toast({ message: '取消' });
});
},
click4() {
alert({
title: '这是 js 调用弹出的提示框',
message: '用户操作后返回的是一个 Promise 对象,可自行做处理。弹框的确定按钮可以通过 confirmText 属性进行更改'
}).then(() => {
modal.toast({ message: '提示框消失了' });
}, () => {
modal.toast({ message: '点击蒙层消失了' });
});
}
btnClick (btn) {
if (btn.type === 'cancel') {
modal.toast({ message: '取消' });
} else if (btn.type === 'confirm') {
modal.toast({ message: '确定' });
} else {
modal.toast({ message: btn.text });
}
this.show = false;
},
dialogOverlayClick () {
this.show = false;
}
}
};
</script>
```
更多详细代码例子可以参考 [demo](https://github.com/FlymeApps/weex-flymeui/blob/master/example/component/dialog/index.vue)
## 可配置参数
| Prop | Type | Required | Default | Description |
|-------------|------------|--------|-----|-----|
| show | `Boolean` |`Y`| `false` | 弹出框是否显示 |
| type | `String` |`N`| `confirm` | 弹框类型:`confirm 确认弹框`、`alert 确认弹框` |
| title | `String` |`Y`| `''` | 标题 |
| content | `String` |`Y`| `''` | 内容 |
| cancel-text | `String` |`N`| `取消` | 取消按钮文案 |
| confirm-text | `String` |`N`| `确认` | 确认按钮文案 |
| cancel-color | `String` |`N`| `#198DED` | 取消按钮颜色 |
| confirm-color | `String` |`N`| `#198DED` | 确认按钮颜色 |
| hasAnimation | `Boolean` |`N`| `true` | 是否需要过渡动画 |
| timingFunction | `Array` |`N`| `['ease-out', 'ease-out']` | 动画过渡函数 |
| duration | `String` |`N`| `#198DED` | 确认按钮颜色 |
| overlay-opacity | `Number` |`N`| `0.5` | 蒙层的透明度,在 `Creator` 中不可用 |
| top | `Number` |`N`| `400` | 框体距离屏幕上方的距离,在 `Creator`中 不生效 |
| btnDirection | `String` |`N`| `row` | 按钮排列方式:`row 横向排列`、`column 纵向排列` |
| btns | `Array` |`N`| `[]` | 自定义按钮,可支持多个按钮 |
| btns[{`text`}] | `String` |`Y`| `''` | 按钮文案 |
| btns[{`color`}] | `String` |`N`| `#198DED` | 按钮颜色 |
| btns[{`type`}] | `String` |`N`| `-` | 按钮类型 |
| btns[{`msg`}] | `AnyType` |`N`| `-` | 附带信息,会在按钮点击回调中返回 |
## Slot
`fm-dialog` 提供了多个插槽来供使用者自定义样式。
1. `<slot name"title"></slot>` : 标题插槽
2. `<slot name"content"></slot>` : 内容插槽
3. `<slot name"btn-group"></slot>` : 按钮插槽
*合理使用插槽可以组合多种弹框:*
<img src="http://image.res.meizu.com/image/flyme-icon/a1110146798f4828a395348f2b43d29bz" width=400 style="box-shadow: 0 5px 10px 0 #d9dce3; border-radius: 4px;" />
<br/>
<img src="http://image.res.meizu.com/image/flyme-icon/c587190e399e4b53a2288e96212f5caaz" width=400 style="box-shadow: 0 5px 10px 0 #d9dce3; border-radius: 4px;" />
<br/>
*例子:*
```vue
<fm-dialog :show="checkListShow"
title="选择语言"
@fmDialogBtnClicked="checkListClick"
@fmDialogDisappeared="checkListOverlayClick"
:can-auto-close="true"
:overlayOpacity="0.1">
<fm-check-list-group slot="content" @fmCheckListGroupChecked="groupChecked">
<fm-checkbox>简体中文</fm-checkbox>
<fm-checkbox>繁体中文</fm-checkbox>
<fm-checkbox>英文</fm-checkbox>
</fm-check-list-group>
</fm-dialog>
<fm-dialog :show="inputShow"
title="弹出输入"
@fmDialogBtnClicked="inputClick"
@fmDialogDisappeared="inputOverlayClick"
:can-auto-close="true">
<fm-input :value="inputText" slot="content" type="text" placeholder="输入点什么.." :autofocus="true" @input="inputing" />
</fm-dialog>
```
## 事件回调
- `fmDialogBtnClicked` 按钮被点击时触发
- `event.type` 按钮类型
- `fmDialogDisappeared` 按钮消失时触发,通常是蒙层被点击后触发弹框消失。请监听此事件并将 `show` 属性重置