mescroll-native.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <!-- 系统自带的下拉刷新,只能配合mescroll-body使用, 在mescroll-uni中无效 -->
  3. <mescroll-body ref="mescrollRef" @init="mescrollInit" :down="downOption" @down="downCallback" :up="upOption" @up="upCallback" @emptyclick="emptyClick">
  4. <view class="tip">系统自带的下拉刷新,性能最好,支持条件编译</view>
  5. <view class="tip">模拟器和真机效果可能不一样,请用真机测试</view>
  6. <view class="tip" @click="triggerDownScroll">点此主动触发下拉刷新</view>
  7. <!-- 菜单 -->
  8. <me-tabs v-model="tabIndex" :tabs="tabs" @change="tabChange"></me-tabs>
  9. <!-- 数据列表 -->
  10. <good-list :list="goods"></good-list>
  11. </mescroll-body>
  12. </template>
  13. <script>
  14. import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
  15. import {apiSearch} from "@/api/mock.js"
  16. export default {
  17. mixins: [MescrollMixin], // 使用mixin (在main.js注册全局组件,内部已注册onPullDownRefresh)
  18. data() {
  19. return {
  20. downOption:{
  21. native: true // 必须配置此项,且需在pages.json配置"enablePullDownRefresh" : true
  22. // 支持条件编译,如您可以配置小程序端使用系统自带的,其他平台使用mescroll的下拉样式
  23. //ifdef MP
  24. // native: true
  25. //endif
  26. //可在mescroll-uni-option.js全局配置native的值
  27. },
  28. upOption:{
  29. noMoreSize: 4,
  30. empty:{
  31. tip: '~ 搜索无数据 ~',
  32. btnText: '去看看'
  33. }
  34. },
  35. goods: [], //列表数据
  36. tabs: ['全部', '奶粉', '面膜', '图书'],
  37. tabIndex: 0 // tab下标
  38. }
  39. },
  40. methods: {
  41. /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
  42. upCallback(page) {
  43. //联网加载数据
  44. let keyword = this.tabs[this.tabIndex]
  45. apiSearch(page.num, page.size, keyword).then(curPageData=>{
  46. //联网成功的回调,隐藏下拉刷新和上拉加载的状态;
  47. this.mescroll.endSuccess(curPageData.length);
  48. //设置列表数据
  49. if(page.num == 1) this.goods = []; //如果是第一页需手动制空列表
  50. this.goods=this.goods.concat(curPageData); //追加新数据
  51. }).catch(()=>{
  52. //联网失败, 结束加载
  53. this.mescroll.endErr();
  54. })
  55. },
  56. //点击空布局按钮的回调
  57. emptyClick(){
  58. uni.showToast({
  59. title:'点击了按钮,具体逻辑自行实现'
  60. })
  61. },
  62. // 切换菜单
  63. tabChange() {
  64. this.goods = []// 先置空列表,显示加载进度
  65. this.mescroll.resetUpScroll() // 再刷新列表数据
  66. },
  67. // 主动触发下拉刷新
  68. triggerDownScroll(){
  69. this.mescroll.triggerDownScroll()
  70. }
  71. }
  72. }
  73. </script>
  74. <style>
  75. .tip{
  76. font-size: 28upx;
  77. height: 60upx;
  78. line-height: 60upx;
  79. text-align: center;
  80. }
  81. </style>