weex-flymeui
Version:
A Flyme Style UI library based on Weex for Creator.
231 lines (193 loc) • 8.19 kB
Markdown
# fm-dialog
> Flyme 弹框组件
!> 注意:组件仅为未完成的 beta 版本,使用方法有可能会变更。
## 规则
- 支持 alert / confirm 弹框
- 支持
<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;" />
## 使用方法
```html
<template>
<div class="mzui-demo">
<fm-button class="btn" @buttonClicked="click1">确认弹框</fm-button>
<fm-button class="btn" @buttonClicked="click2">警告弹框</fm-button>
<!-- 确认弹框 -->
<fm-dialog :show="confirmShow"
title="退出浏览器并清空历史记录"
content="退出浏览器并清空历史记录弹框内容区域此处展示描述"
@fmDialogBtnClicked="btnClick"
@fmDialogDisappeared="dialogOverlayClick"
:can-auto-close="true" />
<!-- 警告弹框 -->
<fm-dialog :show="alertShow"
title="退出浏览器并清空历史记录"
content="退出浏览器并清空历史记录弹框内容区域此处展示描述"
@fmDialogBtnClicked="btnClick"
@fmDialogDisappeared="dialogOverlayClick"
:can-auto-close="true" />
<!-- 输入弹框 -->
<fm-dialog :show="inputShow"
title="弹出输入"
content-type="input"
placeholder="提示文本"
@fmDialogBtnClicked="inputClick"
@fmDialogDisappeared="dialogOverlayClick"
:can-auto-close="true"
:inputDefaultText="inputText">
<!-- 选择弹框 -->
<fm-dialog :show="selectShow"
title="选择语言"
content-type="select"
@fmDialogDisappeared="dialogOverlayClick"
@fmDialogSingleSelected="selectClick"
:can-auto-close="true"
:selectData="list" />
</div>
</template>
<script>
import { FmDialog, confirm, alert } from 'weex-flymeui';
const modal = weex.requireModule('modal');
export default {
components: { FmDialog },
data: () => ({
confirmShow: false,
alertShow: false,
inputShow: false,
selectShow: false,
list: [{
title: '简体中文'
}, {
title: '英文'
}, {
title: '西班牙语'
}]
}),
methods: {
click1 () {
this.confirmShow = true;
},
click2 () {
this.alertShow = true;
},
click3 () {
this.inputShow = true;
},
click4 () {
this.selectShow = true;
},
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;
},
selectClick (e) {
modal.toast({ message: '选择了: ' + e.selectList.map(item => item.title).toString() });
this.selectShow = false;
},
inputClick (e) {
if (e.type === 'cancel') {
modal.toast({ message: '取消' });
} else if (e.type === 'confirm') {
modal.toast({ message: '输入的是: ' + e.inputValue });
} else {
modal.toast({ message: e.text });
}
this.inputShow = false;
},
dialogOverlayClick () {
this.confirmShow = false;
this.alertShow = false;
this.inputShow = false;
this.selectShow = 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 确认弹框` |
| content-type | `String` |`N`| `default` | 内容类型:`default 文字弹框` `input 输入弹框`、`select 选择弹框` |
| 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`| `-` | 附带信息,会在按钮点击回调中返回 |
## 输入弹框配置
当 `content-type` 为 `input` 时有效。
| Prop | Type | Required | Default | Description |
|-------------|------------|--------|-----|-----|
| placeholder | `String` |`N`| `''` | 输入框提示文案 |
| input-default-text | `String` |`N`| `''` | 输入框默认内容 |
## 选择弹框配置
当 `content-type` 为 `select` 时有效。
| Prop | Type | Required | Default | Description |
|-------------|------------|--------|-----|-----|
| select-data | `String` |`N`| `''` | 输入项数据 |
| select-model | `String` |`N`| `'single'` | 选择模式:`single 单选` 和 `multiple 多选` |
| select-limit | `String` |`N`| `0` | 多选模式下的选中限制数量,0 为不限制 |
## 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` 按钮类型
- `event.selectList` 选中的值
- `event.inputValue` 输入的值
- `fmDialogDisappeared` 按钮消失时触发,通常是蒙层被点击后触发弹框消失。请监听此事件并将 `show` 属性重置
- `fmDialogSingleSelected` 单选弹框下选中值之后触发
- `event.selectList` 选中的值
## refs
在 `select` 和 `input` 类型下的弹框可以通过 `$refs` 来获取框内的子组件,以便进行方法调用。对应关系如下:
- `select 模式`: `selecEl` --- 对应 [fm-checkbox-list](/packages/fm-checkbox-list/) 组件
- `input 模式`: `inputEl` --- 对应 [fm-input](/packages/fm-input/) 组件