欢迎访问宙启技术站
智能推送

vue-infinite-loading2.0 中文文档详解

发布时间:2023-05-15 03:33:35

Vue-Infinite-Loading2.0 是一个基于 Vue.js 的无限滚动加载组件,可以很方便地实现下拉刷新和分页加载。

安装

npm install vue-infinite-loading --save

使用

<template>
  <infinite-loading @infinite="infiniteHandler"></infinite-loading>
</template>

<script>
import InfiniteLoading from 'vue-infinite-loading'

export default {
  components: {
    InfiniteLoading
  },

  methods: {
    infiniteHandler($state) {
      // 加载数据
    }
  }
}
</script>

在组件中引入 vue-infinite-loading,然后在模板中添加一个 infinite-loading 组件,然后在方法 infiniteHandler 中加载数据。

infiniteHandler 接受一个 $state 参数,根据这个参数的不同状态来操作数据加载。

- loaded: 加载完成

- error: 加载失败

- complete: 数据已全部加载完成,不需要再进行加载。

// 加载成功
infiniteHandler($state) {
  axios.get('api/list').then(res => {
    if (res.data.length) {
      // 如果还有数据,调用 $state.loaded() 继续加载
      $state.loaded()
    } else {
      // 如果已经没有数据了,调用 $state.complete(),表示全部加载完成
      $state.complete()
    }
  }).catch(() => {
    // 加载失败,调用 $state.error() 重新加载
    $state.error()
  })
}

高度自定义

vue-infinite-loading 可以实现很完美的自定义。

<template>
  <div class="my-list">
    <div v-for="item in list" :key="item.id">{{item.text}}</div>
    <infinite-loading @infinite="infiniteHandler">
      <template #spinner="{ count, $index }">
        <!-- 自定义 spinner -->
      </template>
      <template #no-more>
        <!-- 自定义 no-more 提示 -->
      </template>
      <template #no-results>
        <!-- 自定义 no-results 提示 -->
      </template>
    </infinite-loading>
  </div>
</template>

使用 slot 来实现自定义,具体可以参考[官网](https://peachscript.github.io/vue-infinite-loading/)。

其他属性

vue-infinite-loading 还提供了一些其他属性,比如 spinnerno-moreno-results 来设置加载过程中和加载完成后的提示信息。此外还有 distance 来设置加载触发距离,默认值为 0。

<template>
  <infinite-loading
    :spinner="spinner"
    :no-more="noMore"
    :no-results="noResults"
    :distance="50"
    @infinite="infiniteHandler"
  ></infinite-loading>
</template>

<script>
export default {
  data() {
    return {
      spinner: '<em class="el-icon-loading"></em> 加载中...',
      noMore: '<em class="el-icon-circle-check"></em> 没有更多了',
      noResults: '<em class="el-icon-circle-close"></em> 暂无数据'
    }
  },

  methods: {
    infiniteHandler($state) {
      // 加载数据
    }
  }
}
</script>

总结

vue-infinite-loading2.0 是一个非常好用的组件库,可以实现无限滚动加载和下拉刷新。通过自定义 slot 来实现完美的视图控制,并且支持很多额外的配置。