1.npm install vue-infinite-loading --save
2.npm install --save vue-apollo graphql apollo-client apollo-link apollo-link-http apollo-cache-inmemory graphql-tag
(https://akryum.github.io/vue-apollo/guide/installation.html)复制到main.js 记得把地址换一下。
3.npm i --save lodash
<template>
<div>
<p v-for="(item,index) in companyList" :key="index">
Line:
<span v-text="item.id"></span>
</p>
<infinite-loading @infinite="onInfinite" ref="infiniteLoading">
<span slot="no-more">没有更多数据了</span>
</infinite-loading>
</div>
</template>
<script>
import _ from "lodash"
import InfiniteLoading from 'vue-infinite-loading'
import gql from 'graphql-tag'
export default {
data() {
return {
list:[],
storeLimit:20,
page: 0,
skipQuery: true,
hasMore: true,
companyList: []
};
},
apollo: {
companies:{
query: gql`query companies($skip:Int,$take:Int){
companies(skip:$skip,take:$take ){
pageInfo{
skip
take
totalPage
currPage
}
items{
id
}
}
}`,
variables: {
skip: 0,
take: this.storeLimit,
},
skip() {
return this.skipQuery
},
result({ data}) {
this.companyList = [].concat(_.get(data, 'companies.items', []))
},
}
},
computed:{
companiesList(){
return _.get(this.companies,'items')
}
},
methods: {
onInfinite($state) {
//onInfinite这个函数当圈圈出现的时候就会自动执行
//this.page==0 是为了this.skipQuery = false 初始化一下我们的阿波罗
if(this.page === 0) {
this.skipQuery = false
this.page = 1
$state.loaded()
} else {
this.loadMore($state)
}
},
loadMore($state) {
if(this.page<5){
this.$apollo.queries.companies.fetchMore({
variables: {
skip: this.page * this.storeLimit,
take: this.storeLimit
},
updateQuery: (previousResult, { fetchMoreResult }) => {
const pageInfo = _.get(fetchMoreResult, 'companies.pageInfo')
const items = _.get(fetchMoreResult, 'companies.items', [])
const hasMore = items.length && pageInfo.currPage < pageInfo.totalPage
this.companyList = this.companyList.concat(items)
if(hasMore) {
this.page += 1
$state.loaded()
} else {
$state.complete()
}
}
})
}else{
$state.complete()
}
}
},
components: {
InfiniteLoading
}
}
</script>