UNPKG

weex-flymeui

Version:

A Flyme Style UI library based on Weex for Creator.

231 lines (193 loc) 8.19 kB
# 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/) 组件