How to make an infinite loader in Nuxt?(如何在Nuxt中制作无限装载机?)
本文介绍了如何在Nuxt中制作无限装载机?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
你好,我想在无限加载后显示数据,我的数据通过异步数据发送到页面和id页面,就像这样
Page
<script>
export default {
async asyncData({ $axios, store }) {
const customerId = store.getters['user/auth/customerId']
if (!customerId) {
return
}
const products = await customerApi.getProducts(
{ $axios },
customerId,
this.page
)
return {
products,
}
},
data() {
return {
page: 1,
}
},
}
</script>
我有第一页的数据。产品是我模板中发送的道具数据。在我的模板中,我添加了无限加载
template
<template>
<generic-button v-if="!viewMore" inline @click="viewMore = true">
see more
</generic-button>
<client-only v-else>
<infinite-loading
:distance="800"
force-use-infinite-wrapper
@infinite="infiniteHandler"
></infinite-loading>
</client-only>
</template>
<script>
export default {
components: {
InfiniteLoading: () =>
process.client
? import('vue-infinite-loading')
: Promise.resolve({ render: (h) => h('div') }),
},
props: {
products: {
type: Array,
required: true,
},
},
data() {
return {
page: 1,
}
},
methods: {
infiniteHandler($state) {
// the method that will look for the data when the pagination changes
},
},
}
</script>
我希望在开始分页时,通过将页面参数更改为+1来重新启动异步数据请求并显示数据
谢谢您
推荐答案
我真的不太喜欢vue-infinite-loading
package,但我还是设法让它工作起来。
这是您想要的父/子关系的最终结果。
parent page
<template>
<div>
<nuxt-link :to="{ name: 'redirect' }">
Go to another page and come back to have this one triggered
</nuxt-link>
<child ref="child" :users="users" @fetchMore="callApi"></child>
</div>
</template>
<script>
export default {
name: 'ParentPage',
async asyncData({ $axios }) {
const { data } = await $axios.$get(
'https://reqres.in/api/users?per_page=2&page=1'
)
return { users: data }
},
methods: {
async callApi(newPageAsked) {
const { data: newUsers } = await this.$axios.$get(
`https://reqres.in/api/users?per_page=2&page=${newPageAsked}`
)
console.log('new users fetched? ', newUsers)
if (newUsers.length) {
// if API got some new users, add them to the current list
this.users = [...this.users, ...newUsers]
// tell `infinite-loading` component that the fetch was successful
this.$refs.child.$refs.infiniteLoader.stateChanger.loaded()
} else {
// if the API do not have anymore users to fetch
this.$refs.child.$refs.infiniteLoader.stateChanger.complete()
}
},
},
}
</script>
Child.vue
<template>
<div class="small-height">
<div v-for="user in users" :key="user.id">
<p class="user">
<span>{{ user.first_fame }}</span>
<span>{{ user.last_name }}</span>
<br />
<span>{{ user.email }}</span>
<br />
<img :src="user.avatar" />
</p>
</div>
<infinite-loading
ref="infiniteLoader"
@infinite="infiniteHandler"
></infinite-loading>
</div>
</template>
<script>
import InfiniteLoading from 'vue-infinite-loading'
export default {
name: 'Child',
components: {
InfiniteLoading,
},
props: {
users: {
type: Array,
default: () => [],
},
},
data() {
return {
page: 1,
}
},
methods: {
infiniteHandler($state) {
this.page += 1
this.$emit('fetchMore', this.page)
},
},
}
</script>
<style scoped>
.small-height {
height: 200px;
border: 2px solid red;
width: 400px;
overflow-y: auto;
}
.user {
height: 200px;
}
</style>
这里是此版本的github repo,托管版本可以是found here!
我已添加备注,如果您检查"网络"选项卡,您应该有足够的信息来查看正在发生的情况。
我已使用reqres.in模拟分页API。
这篇关于如何在Nuxt中制作无限装载机?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在Nuxt中制作无限装载机?
基础教程推荐
猜你喜欢
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 在for循环中使用setTimeout 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 动态更新多个选择框 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01