Showing
3 changed files
with
80 additions
and
4 deletions
| 1 | <template> | 1 | <template> |
| 2 | - <div class=""></div> | 2 | + <div class="book-video-list"> |
| 3 | + <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> | ||
| 4 | + <template v-for="item in dataList" :key="item" style="height: 3rem;"> | ||
| 5 | + <video-card :item="item"></video-card> | ||
| 6 | + </template> | ||
| 7 | + </van-list> | ||
| 8 | + </div> | ||
| 3 | </template> | 9 | </template> |
| 4 | 10 | ||
| 5 | <script setup> | 11 | <script setup> |
| 12 | +import dataList from '@/mock/video_list' | ||
| 13 | +import VideoCard from '@/components/VideoCard/index.vue' | ||
| 14 | + | ||
| 6 | import { ref, reactive, onMounted } from 'vue' | 15 | import { ref, reactive, onMounted } from 'vue' |
| 7 | import { useRoute, useRouter } from 'vue-router' | 16 | import { useRoute, useRouter } from 'vue-router' |
| 8 | import axios from '@/utils/axios'; | 17 | import axios from '@/utils/axios'; |
| ... | @@ -11,6 +20,29 @@ import { Toast } from 'vant'; | ... | @@ -11,6 +20,29 @@ import { Toast } from 'vant'; |
| 11 | const $route = useRoute(); | 20 | const $route = useRoute(); |
| 12 | const $router = useRouter(); | 21 | const $router = useRouter(); |
| 13 | 22 | ||
| 23 | +// 处理书籍下作品列表 | ||
| 24 | +const list = ref([]); | ||
| 25 | +const loading = ref(false); | ||
| 26 | +const finished = ref(false); | ||
| 27 | + | ||
| 28 | +const onLoad = () => { | ||
| 29 | + // 异步更新数据 | ||
| 30 | + // setTimeout 仅做示例,真实场景中一般为 ajax 请求 | ||
| 31 | + setTimeout(() => { | ||
| 32 | + for (let i = 0; i < 20; i++) { | ||
| 33 | + list.value.push(list.value.length + 1); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + // 加载状态结束 | ||
| 37 | + loading.value = false; | ||
| 38 | + | ||
| 39 | + // 数据全部加载完成 | ||
| 40 | + if (list.value.length >= 100) { | ||
| 41 | + finished.value = true; | ||
| 42 | + } | ||
| 43 | + }, 1000); | ||
| 44 | +}; | ||
| 45 | + | ||
| 14 | onMounted(() => { | 46 | onMounted(() => { |
| 15 | 47 | ||
| 16 | }) | 48 | }) | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | - <div class=""></div> | 2 | + <div class="book-video-list"> |
| 3 | + <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> | ||
| 4 | + <template v-for="item in dataList" :key="item" style="height: 3rem;"> | ||
| 5 | + <video-card :item="item"></video-card> | ||
| 6 | + </template> | ||
| 7 | + </van-list> | ||
| 8 | + </div> | ||
| 3 | </template> | 9 | </template> |
| 4 | 10 | ||
| 5 | <script setup> | 11 | <script setup> |
| 12 | +import dataList from '@/mock/video_list' | ||
| 13 | +import VideoCard from '@/components/VideoCard/index.vue' | ||
| 14 | + | ||
| 6 | import { ref, reactive, onMounted } from 'vue' | 15 | import { ref, reactive, onMounted } from 'vue' |
| 7 | import { useRoute, useRouter } from 'vue-router' | 16 | import { useRoute, useRouter } from 'vue-router' |
| 8 | import axios from '@/utils/axios'; | 17 | import axios from '@/utils/axios'; |
| ... | @@ -11,6 +20,29 @@ import { Toast } from 'vant'; | ... | @@ -11,6 +20,29 @@ import { Toast } from 'vant'; |
| 11 | const $route = useRoute(); | 20 | const $route = useRoute(); |
| 12 | const $router = useRouter(); | 21 | const $router = useRouter(); |
| 13 | 22 | ||
| 23 | +// 处理书籍下作品列表 | ||
| 24 | +const list = ref([]); | ||
| 25 | +const loading = ref(false); | ||
| 26 | +const finished = ref(false); | ||
| 27 | + | ||
| 28 | +const onLoad = () => { | ||
| 29 | + // 异步更新数据 | ||
| 30 | + // setTimeout 仅做示例,真实场景中一般为 ajax 请求 | ||
| 31 | + setTimeout(() => { | ||
| 32 | + for (let i = 0; i < 20; i++) { | ||
| 33 | + list.value.push(list.value.length + 1); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + // 加载状态结束 | ||
| 37 | + loading.value = false; | ||
| 38 | + | ||
| 39 | + // 数据全部加载完成 | ||
| 40 | + if (list.value.length >= 100) { | ||
| 41 | + finished.value = true; | ||
| 42 | + } | ||
| 43 | + }, 1000); | ||
| 44 | +}; | ||
| 45 | + | ||
| 14 | onMounted(() => { | 46 | onMounted(() => { |
| 15 | 47 | ||
| 16 | }) | 48 | }) | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | - <div class=""></div> | 2 | + <div class="book-list"> |
| 3 | + <template v-for="(item, key) in items" :key="key"> | ||
| 4 | + <book-card :item="item" @on-click="onClick(item)"></book-card> | ||
| 5 | + </template> | ||
| 6 | + </div> | ||
| 3 | </template> | 7 | </template> |
| 4 | 8 | ||
| 5 | <script setup> | 9 | <script setup> |
| 10 | +import BookCard from '@/components/BookCard/index.vue' | ||
| 6 | import { ref, reactive, onMounted } from 'vue' | 11 | import { ref, reactive, onMounted } from 'vue' |
| 7 | import { useRoute, useRouter } from 'vue-router' | 12 | import { useRoute, useRouter } from 'vue-router' |
| 8 | import axios from '@/utils/axios'; | 13 | import axios from '@/utils/axios'; |
| ... | @@ -11,8 +16,15 @@ import { Toast } from 'vant'; | ... | @@ -11,8 +16,15 @@ import { Toast } from 'vant'; |
| 11 | const $route = useRoute(); | 16 | const $route = useRoute(); |
| 12 | const $router = useRouter(); | 17 | const $router = useRouter(); |
| 13 | 18 | ||
| 19 | +const items = reactive([]) | ||
| 20 | + | ||
| 14 | onMounted(() => { | 21 | onMounted(() => { |
| 15 | - | 22 | + for (let index = 0; index < 20; index++) { |
| 23 | + items.push({ | ||
| 24 | + id: index, | ||
| 25 | + avatar: 'https://cdn.jsdelivr.net/npm/@vant/assets/cat.jpeg' | ||
| 26 | + }) | ||
| 27 | + } | ||
| 16 | }) | 28 | }) |
| 17 | </script> | 29 | </script> |
| 18 | 30 | ... | ... |
-
Please register or login to post a comment