infinite-scroll.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <script lang="ts" setup>
  2. import { ref } from "vue";
  3. import { default as vElTableInfiniteScroll } from "el-table-infinite-scroll";
  4. defineOptions({
  5. name: "InfiniteScroll"
  6. });
  7. const dataTemplate = new Array(10).fill({
  8. date: "2022-08-24",
  9. name: "RealityBoy",
  10. age: "18"
  11. });
  12. const data = ref([]);
  13. const disabled = ref(false);
  14. const page = ref(0);
  15. const total = ref(10);
  16. const load = () => {
  17. if (disabled.value) return;
  18. page.value++;
  19. if (page.value <= total.value) {
  20. data.value = data.value.concat(dataTemplate);
  21. }
  22. if (page.value === total.value) {
  23. disabled.value = true;
  24. }
  25. };
  26. </script>
  27. <template>
  28. <el-card>
  29. <template #header>
  30. <div class="font-medium">
  31. 表格无限滚动(
  32. <el-link
  33. href="https://github.com/yujinpan/el-table-infinite-scroll"
  34. target="_blank"
  35. style="font-size: 16px; margin: 0 5px 4px 0"
  36. >
  37. github地址
  38. </el-link>
  39. </div>
  40. </template>
  41. <div>
  42. <p class="mb-2">
  43. <span>loaded page(total: {{ total }}): {{ page }}, </span>
  44. disabled:
  45. <el-switch v-model="disabled" :disabled="page >= total" />
  46. </p>
  47. <el-table
  48. v-el-table-infinite-scroll="load"
  49. :data="data"
  50. :infinite-scroll-disabled="disabled"
  51. height="435px"
  52. >
  53. <el-table-column type="index" />
  54. <el-table-column prop="date" label="date" />
  55. <el-table-column prop="name" label="name" />
  56. <el-table-column prop="age" label="age" />
  57. </el-table>
  58. </div>
  59. </el-card>
  60. </template>