diff --git a/src/pull-refresh/README.md b/src/pull-refresh/README.md
index 54862d268..515fea14b 100644
--- a/src/pull-refresh/README.md
+++ b/src/pull-refresh/README.md
@@ -42,6 +42,20 @@ export default {
}
```
+### Success Tip
+
+Use `success-text` to set the success prompt after the refresh is successful
+
+```html
+
+ Refresh Count: {{ count }}
+
+```
+
## API
### Props
@@ -66,10 +80,11 @@ export default {
### Slots
-| Name | Description | scoped-slot |
+| Name | Description | SlotProps |
|------|------|------|
| default | Default slot | - |
| normal | Content of head when at normal status | - |
| pulling | Content of head when at pulling | { distance } |
| loosing | Content of head when at loosing | { distance } |
| loading | Content of head when at loading | { distance } |
+| success | Content of head when succeed | - |
diff --git a/src/pull-refresh/README.zh-CN.md b/src/pull-refresh/README.zh-CN.md
index b87738b41..2bc54f836 100644
--- a/src/pull-refresh/README.zh-CN.md
+++ b/src/pull-refresh/README.zh-CN.md
@@ -42,18 +42,32 @@ export default {
}
```
+### 刷新成功提示
+
+通过`success-text`可以设置刷新成功后的顶部提示文案
+
+```html
+
+ 刷新次数: {{ count }}
+
+```
+
## API
### Props
| 参数 | 说明 | 类型 | 默认值 | 版本 |
|------|------|------|------|------|
-| v-model | 是否在加载中 | *boolean* | - | - |
-| pulling-text | 下拉过程文案 | *string* | `下拉即可刷新...` | - |
-| loosing-text | 释放过程文案 | *string* | `释放即可刷新...` | - |
-| loading-text | 加载过程文案 | *string* | `加载中...` | - |
-| success-text | 加载成功提示文案 | *string* | - | - |
-| success-duration | 加载成功提示时长(ms) | *number* | `500` | - |
+| v-model | 是否处于加载中状态 | *boolean* | - | - |
+| pulling-text | 下拉过程提示文案 | *string* | `下拉即可刷新...` | - |
+| loosing-text | 释放过程提示文案 | *string* | `释放即可刷新...` | - |
+| loading-text | 加载过程提示文案 | *string* | `加载中...` | - |
+| success-text | 刷新成功提示文案 | *string* | - | - |
+| success-duration | 刷新成功提示展示时长(ms) | *number* | `500` | - |
| animation-duration | 动画时长 | *number* | `300` | - |
| head-height | 顶部内容高度 | *number* | `50` | - |
| disabled | 是否禁用下拉刷新 | *boolean* | `false` | - |
@@ -66,13 +80,14 @@ export default {
### Slots
-| 名称 | 说明 | scoped-slot 参数 |
+| 名称 | 说明 | SlotProps |
|------|------|------|
| default | 自定义内容 | - |
| normal | 非下拉状态时顶部内容 | - |
| pulling | 下拉过程中顶部内容 | { distance: 当前下拉距离 } |
| loosing | 释放过程中顶部内容 | { distance: 当前下拉距离 } |
| loading | 加载过程中顶部内容 | { distance: 当前下拉距离 } |
+| success | 刷新成功提示内容 | - |
## 常见问题
diff --git a/src/pull-refresh/demo/index.vue b/src/pull-refresh/demo/index.vue
index 2dbab6ecd..f9b8fe0a3 100644
--- a/src/pull-refresh/demo/index.vue
+++ b/src/pull-refresh/demo/index.vue
@@ -1,13 +1,22 @@
-
-
- {{ $t('text') }}: {{ count }}
-
-
+
+
+
+ {{ tips }}
+
+
+
+
+
+ {{ tips }}
+
+
+
@@ -16,11 +25,15 @@ export default {
i18n: {
'zh-CN': {
text: '刷新次数',
- success: '刷新成功'
+ success: '刷新成功',
+ successTip: '刷新成功提示',
+ try: '下拉试试'
},
'en-US': {
text: 'Refresh Count',
- success: 'Refresh success'
+ success: 'Refresh success',
+ successTip: 'Success Tip',
+ try: 'Try it down'
}
},
@@ -31,10 +44,23 @@ export default {
};
},
+ computed: {
+ tips() {
+ if (this.count) {
+ return `${this.$t('text')}: ${this.count}`;
+ }
+
+ return this.$t('try');
+ }
+ },
+
methods: {
- onRefresh() {
+ onRefresh(showToast) {
setTimeout(() => {
- this.$toast(this.$t('success'));
+ if (showToast) {
+ this.$toast(this.$t('success'));
+ }
+
this.isLoading = false;
this.count++;
}, 500);
@@ -44,7 +70,7 @@ export default {
diff --git a/src/pull-refresh/index.js b/src/pull-refresh/index.js
index 7f65f61cf..b1bacf3a6 100644
--- a/src/pull-refresh/index.js
+++ b/src/pull-refresh/index.js
@@ -54,14 +54,12 @@ export default createComponent({
value(loading) {
this.duration = this.animationDuration;
- if (!loading && this.successText) {
- this.status = 'success';
-
- setTimeout(() => {
- this.setStatus(0);
- }, this.successDuration);
+ if (loading) {
+ this.setStatus(this.headHeight, true);
+ } else if (this.slots('success') || this.successText) {
+ this.showSuccessTip();
} else {
- this.setStatus(loading ? this.headHeight : 0, loading);
+ this.setStatus(0, false);
}
}
},
@@ -173,6 +171,14 @@ export default createComponent({
}
return nodes;
+ },
+
+ showSuccessTip() {
+ this.status = 'success';
+
+ setTimeout(() => {
+ this.setStatus(0);
+ }, this.successDuration);
}
},
diff --git a/src/pull-refresh/test/__snapshots__/demo.spec.js.snap b/src/pull-refresh/test/__snapshots__/demo.spec.js.snap
index 836eae87d..2908bbf40 100644
--- a/src/pull-refresh/test/__snapshots__/demo.spec.js.snap
+++ b/src/pull-refresh/test/__snapshots__/demo.spec.js.snap
@@ -2,11 +2,25 @@
exports[`renders demo correctly 1`] = `
-
-
-
-
-
刷新次数: 0
+
diff --git a/src/pull-refresh/test/__snapshots__/index.spec.js.snap b/src/pull-refresh/test/__snapshots__/index.spec.js.snap
index 1cb7b8d68..96cea10fb 100644
--- a/src/pull-refresh/test/__snapshots__/index.spec.js.snap
+++ b/src/pull-refresh/test/__snapshots__/index.spec.js.snap
@@ -80,6 +80,14 @@ exports[`not in page top 1`] = `
`;
+exports[`render success slot 1`] = `
+
+`;
+
exports[`render success text 1`] = `
diff --git a/src/pull-refresh/test/index.spec.js b/src/pull-refresh/test/index.spec.js
index 8b442abe2..342e91cb5 100644
--- a/src/pull-refresh/test/index.spec.js
+++ b/src/pull-refresh/test/index.spec.js
@@ -119,9 +119,7 @@ test('render success text', async () => {
});
const track = wrapper.find('.van-pull-refresh__track');
- trigger(track, 'touchstart', 0, 0);
- trigger(track, 'touchmove', 0, 100);
- trigger(track, 'touchend', 0, 100);
+ triggerDrag(track, 0, 100);
await later();
@@ -136,3 +134,25 @@ test('render success text', async () => {
await later();
expect(wrapper).toMatchSnapshot();
});
+
+test('render success slot', async () => {
+ const wrapper = mount(PullRefresh, {
+ scopedSlots: {
+ success: () => 'Custom Success'
+ },
+ listeners: {
+ input(value) {
+ wrapper.setProps({ value });
+ }
+ }
+ });
+
+ const track = wrapper.find('.van-pull-refresh__track');
+ triggerDrag(track, 0, 100);
+
+ await later();
+
+ expect(wrapper.vm.value).toBeTruthy();
+ wrapper.setProps({ value: false });
+ expect(wrapper).toMatchSnapshot();
+});