index.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <template>
  2. <demo-section>
  3. <van-tabs>
  4. <van-tab :title="$t('basicUsage')">
  5. <van-pull-refresh
  6. v-model="list[0].refreshing"
  7. @refresh="onRefresh(0)"
  8. >
  9. <van-list
  10. v-model="list[0].loading"
  11. :finished="list[0].finished"
  12. :finished-text="$t('finishedText')"
  13. @load="onLoad(0)"
  14. >
  15. <van-cell
  16. v-for="item in list[0].items"
  17. :key="item"
  18. :title="item"
  19. />
  20. </van-list>
  21. </van-pull-refresh>
  22. </van-tab>
  23. <van-tab :title="$t('errorInfo')">
  24. <van-pull-refresh
  25. v-model="list[1].refreshing"
  26. @refresh="onRefresh(1)"
  27. >
  28. <van-list
  29. v-model="list[1].loading"
  30. :finished="list[1].finished"
  31. :error.sync="list[1].error"
  32. :error-text="$t('errorText')"
  33. @load="onLoad(1)"
  34. >
  35. <van-cell
  36. v-for="item in list[1].items"
  37. :key="item"
  38. :title="item"
  39. />
  40. </van-list>
  41. </van-pull-refresh>
  42. </van-tab>
  43. </van-tabs>
  44. </demo-section>
  45. </template>
  46. <script>
  47. export default {
  48. i18n: {
  49. 'zh-CN': {
  50. errorInfo: '错误提示',
  51. finishedText: '没有更多了',
  52. errorText: '请求失败,点击重新加载'
  53. },
  54. 'en-US': {
  55. errorInfo: 'Error Info',
  56. finishedText: 'Finished',
  57. errorText: 'Request failed. Click to reload'
  58. }
  59. },
  60. data() {
  61. return {
  62. list: [{
  63. items: [],
  64. refreshing: false,
  65. loading: false,
  66. error: false,
  67. finished: false
  68. }, {
  69. items: [],
  70. refreshing: false,
  71. loading: false,
  72. error: false,
  73. finished: false
  74. }]
  75. };
  76. },
  77. methods: {
  78. onLoad(index) {
  79. const list = this.list[index];
  80. setTimeout(() => {
  81. for (let i = 0; i < 10; i++) {
  82. const text = list.items.length + 1;
  83. list.items.push(text < 10 ? '0' + text : text);
  84. }
  85. list.loading = false;
  86. // show error info in second demo
  87. if (index === 1 && list.items.length === 10 && !list.error) {
  88. list.error = true;
  89. } else {
  90. list.error = false;
  91. }
  92. if (list.items.length >= 40) {
  93. list.finished = true;
  94. }
  95. }, 500);
  96. },
  97. onRefresh(index) {
  98. const list = this.list[index];
  99. setTimeout(() => {
  100. list.items = [];
  101. list.error = false;
  102. list.finished = false;
  103. list.refreshing = false;
  104. window.scrollTo(0, 10);
  105. }, 1000);
  106. }
  107. }
  108. };
  109. </script>
  110. <style lang="less">
  111. @import '../../style/var';
  112. .demo-list {
  113. .van-cell {
  114. text-align: center;
  115. }
  116. .page-desc {
  117. padding: 5px 0;
  118. margin: 0;
  119. font-size: 14px;
  120. text-align: center;
  121. color: @gray-darker;
  122. &--text {
  123. margin: 0;
  124. }
  125. &--option {
  126. margin: 12px;
  127. }
  128. }
  129. .van-checkbox__label {
  130. color: @gray-darker;
  131. }
  132. }
  133. </style>