diff --git a/example/pages/dialog/index.js b/example/pages/dialog/index.js index b5bbe1bf..853d8eb4 100644 --- a/example/pages/dialog/index.js +++ b/example/pages/dialog/index.js @@ -19,6 +19,10 @@ Page({ }); }, + getUserInfo(event) { + console.log(event.detail); + }, + onClickAlert2() { Dialog.alert({ message: '内容' diff --git a/example/pages/dialog/index.wxml b/example/pages/dialog/index.wxml index 73caac87..26fa3f80 100644 --- a/example/pages/dialog/index.wxml +++ b/example/pages/dialog/index.wxml @@ -7,14 +7,16 @@ Confirm - - 高级用法 + + 组件调用 { - target[map[key]] = source[key]; + if (source[key]) { + target[map[key]] = source[key]; + } }); } diff --git a/packages/dialog/README.md b/packages/dialog/README.md index 2ea85f82..00c91ab8 100644 --- a/packages/dialog/README.md +++ b/packages/dialog/README.md @@ -52,9 +52,9 @@ Dialog.confirm({ }); ``` -#### 高级用法 +#### 组件调用 -通过组件调用 Dialog 时,可以实现自定义弹窗内容、异步关闭等高级特性,具体可以参考下面的示例 +通过组件调用 Dialog 时,可以实现自定义弹窗内容、异步关闭、监听微信开放能力回调事件,具体可以参考下面的示例 ```html 枚举为`confirm`,`cancel`,`overlay` | | bind:confirm | 点击确认按钮时触发 | - | | bind:cancel | 点击取消按钮时触发 | - | +| bind:getuserinfo | 点击确认按钮时,会返回获取到的用户信息,
从返回参数的 detail 中获取到的值同 wx.getUserInfo | - | +| bind:contact | 客服消息回调 | - | +| bind:getphonenumber | 获取用户手机号回调 | - | +| bind:error | 当使用开放能力时,发生错误的回调 | - | +| bind:opensetting | 在打开授权设置页后回调 | - | ### 更新日志 diff --git a/packages/dialog/index.ts b/packages/dialog/index.ts index c67180a2..75ea4920 100644 --- a/packages/dialog/index.ts +++ b/packages/dialog/index.ts @@ -1,6 +1,9 @@ import { VantComponent } from '../common/component'; +import { openType } from '../mixins/open-type'; VantComponent({ + mixins: [openType], + props: { show: Boolean, title: String, @@ -79,7 +82,9 @@ VantComponent({ }, close() { - this.setData({ show: false }); + this.setData({ + show: false + }); }, onClose(action) { diff --git a/packages/dialog/index.wxml b/packages/dialog/index.wxml index 7f3ede5f..46dc8f0d 100644 --- a/packages/dialog/index.wxml +++ b/packages/dialog/index.wxml @@ -37,6 +37,11 @@ custom-class="van-dialog__confirm" open-type="{{ confirmButtonOpenType }}" bind:click="onConfirm" + bindcontact="bindContact" + bindgetuserinfo="bindGetUserInfo" + bindgetphonenumber="bindGetPhoneNumber" + binderror="bindError" + bindopensetting="bindOpenSetting" > {{ confirmButtonText }} diff --git a/packages/mixins/button.ts b/packages/mixins/button.ts index bffa9caf..1a91db5a 100644 --- a/packages/mixins/button.ts +++ b/packages/mixins/button.ts @@ -1,8 +1,6 @@ export const button = Behavior({ properties: { id: String, - loading: Boolean, - openType: String, appParameter: String, sendMessageTitle: String, sendMessagePath: String, @@ -25,27 +23,5 @@ export const button = Behavior({ type: String, value: '' } - }, - - methods: { - bindgetuserinfo(event: Partial) { - this.$emit('getuserinfo', event.detail); - }, - - bindcontact(event: Partial) { - this.$emit('contact', event.detail); - }, - - bindgetphonenumber(event: Partial) { - this.$emit('getphonenumber', event.detail); - }, - - bindopensetting(event: Partial) { - this.$emit('opensetting', event.detail); - }, - - binderror(event: Partial) { - this.$emit('error', event.detail); - } } }); diff --git a/packages/mixins/observer/index.ts b/packages/mixins/observer/index.ts index 72ad47a9..9a689626 100644 --- a/packages/mixins/observer/index.ts +++ b/packages/mixins/observer/index.ts @@ -5,16 +5,19 @@ export function observe(vantOptions, options) { const { watch, computed } = vantOptions; if (watch) { - options.properties = options.properties || {}; + const props = options.properties || {}; Object.keys(watch).forEach(key => { - if (key in options.properties) { - let prop = options.properties[key]; + if (key in props) { + let prop = props[key]; if (prop === null || !prop.type) { prop = { type: prop }; } prop.observer = watch[key]; + props[key] = prop; } }); + + options.properties = props; } if (computed) { diff --git a/packages/mixins/open-type.ts b/packages/mixins/open-type.ts new file mode 100644 index 00000000..f0460aff --- /dev/null +++ b/packages/mixins/open-type.ts @@ -0,0 +1,27 @@ +export const openType = Behavior({ + properties: { + openType: String + }, + + methods: { + bindGetUserInfo(event: Partial) { + this.$emit('getuserinfo', event.detail); + }, + + bindContact(event: Partial) { + this.$emit('contact', event.detail); + }, + + bindGetPhoneNumber(event: Partial) { + this.$emit('getphonenumber', event.detail); + }, + + bindOpenSetting(event: Partial) { + this.$emit('opensetting', event.detail); + }, + + bindError(event: Partial) { + this.$emit('error', event.detail); + } + } +});