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);
+ }
+ }
+});