无限加载 vue用infinite-loading插件和阿波罗请求

摘要:
1.npminstallvue无限加载--save2.npminstall--savevue apollographqlapollo客户端apollo链接apollo连接httpapollo缓存inmemorygraphql标记(https://akryum.github.io/vue-apollo/guide/installation

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>

  

免责声明:文章转载自《无限加载 vue用infinite-loading插件和阿波罗请求》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇KML添加自定义数据Python 全栈开发:dict(字典)常用方法操作、dict嵌套下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue 数组push元素 视图没更新

Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新。这些方法如下: push() pop() shift() unshift() splice() sort() reverse() 问题描述:在tap栏下,给每个tab添加一行数据,默认行就可以一直添加,切换到1号的tab添加时,数组已经添加成功,但是视图就是没有变化,来回切换才手动更新 ...

vue路由跳转页面的几种方式及其区别

场景:A页面跳转到B页面并携带参数 方案一:声明式导航router-link 1.1不带参数: // 注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由开始。 <router-link :to="{name:'home'}"> <router-link :to="{path:'/hom...

vue中detele删除对象属性时视图不能响应更新

如下代码片段 // js obj = { a: 123, b: 223, c: 323 } // html <li v-for="item in obj">{{ item }}</li> 此时若在methods中使用 delete this.obj.a 或者 delete this.obj["a"]会发现视图中...

vue基础(七),同源策略以及跨域,vuex

跨域基础 跨域: 1、是什么 你的目标和你自己现在的位置一样还是不一样 浏览器上的同源策略 特点: 1、跨域只存在于浏览器 2、不在浏览器发请求是不会存在跨域问题的 3、http请求分为两大类: 普通http请求(如百度请求)和ajax请求(跨域是出...

vue 页面跳转

一、在template中的常见写法: <router-link to="/miniCard/statement/horizon"> <button class="btn btn-default">点击跳转</button> </router-link> 二、在js中设置跳转(在方法中跳转界面并传...

vue项目中echarts属性总结

<div style=" 600px;height: 400px;margin-top: 100px;margin-left: 100px"></div>   js函数中: this.EchartsData = this.$echarts.init(document.getElementById('echarts')); l...