el autocomplete支持分页上拉加载使用详解

yizhihongxing

下面是详细讲解“el autocomplete支持分页上拉加载使用详解”的完整攻略:

什么是el autocomplete?

el autocompleteelement-ui 组件库提供的可输入下拉选择框组件,可以根据用户输入的数据进行联想提示,提升用户的选择效率。当列表数据量很大的时候,很多时候我们希望能够进行分页和上拉加载,从而提高性能,减少一次性加载太多数据而导致页面卡顿的问题。

如何使用el autocomplete进行分页上拉加载?

使用 el autocomplete 进行分页上拉加载需要通过几个步骤来实现:

  1. 第一步,需要制定数据源

el autocomplete 组件需要接收一个数据源,这个数据源可以是一个数组,也可以是一个异步请求。在分页和上拉加载的情况下,我们通常采用异步请求的方式来获取数据。下面是一个例子,使用 axios 库发起一个请求来获取远程数据:

javascript
axios.get('/api/getList', {
params: {
page: 1,
size: 10
}
}).then(response => {
console.log(response.data)
})

  1. 第二步,定义 el autocomplete 模板

在定义 el autocomplete 组件的时候,需要定义模板,这个模板会影响 el autocomplete 的显示效果。下面是一段基本的模板代码:

html
<template slot-scope="{ value }">
<div class="item">{{ value }}</div>
</template>

在这个模板中,我们定义了显示 el autocomplete 的每一行数据的样式。在实际使用中,我们可以根据自己的需求修改模板代码。

  1. 第三步,实现分页和上拉加载

在定义 el autocomplete 的时候,我们需要设置 fetch-suggestions 属性来指定如何获取数据。这个属性接收一个方法,这个方法需要返回一个 Promise 对象,用于异步请求获取数据。下面是一个例子:

```html
<el-autocomplete
v-model="value"
:fetch-suggestions="querySearchAsync"
placeholder="请输入关键字"
@select="handleSelect"

 <template slot-scope="{ item }">
   <div class="item">{{ item }}</div>
 </template>


```

在这个例子中,我们在 el-autocomplete 标签上设置了 fetch-suggestions 属性,这个属性指向了一个方法名为 querySearchAsync 的函数。这个函数会发起一个异步请求,获取数据,并返回 Promise 对象。

  1. 第四步,完善代码

在上述步骤中,我们只实现了获取数据和分页上拉加载的基本功能。如果想要更好的使用 el autocomplete,我们还需要完善以下几点:

  • 设置 debounce 属性,避免在用户快速输入关键字时频繁地发送请求,可以提高性能

  • 实现输入时即时搜索功能,可以在用户输入字符时即时展示匹配结果

  • 根据返回结果的情况设置 loading 属性,避免在请求数据时用户误操作

  • 根据返回结果的情况设置 no-moreno-data 属性,避免在没有更多数据或没有数据时用户误操作

示例说明

下面是两个示例说明:

示例1

在这个示例中,我们通过 el autocomplete 实现了在输入关键字时即时展示匹配结果的功能。具体代码如下:

<template>
  <div class="autocomplete-demo">
    <el-autocomplete
      v-model="value"
      :fetch-suggestions="querySearchAsync"
      placeholder="请输入关键字"
      :debounce="300"
      @select="handleSelect"
      :loading="loading"
      :no-more="noMore"
    >
      <template slot-scope="{ item }">
        <div class="item">{{ item }}</div>
      </template>
    </el-autocomplete>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  data() {
    return {
      value: '',
      loading: false,
      noMore: false,
      list: [],
      page: 1,
      size: 10
    }
  },
  methods: {
    querySearchAsync(queryString, cb) {
      if (!queryString) {
        cb([])
        return
      }
      this.loading = true
      axios.get('/api/getList', {
        params: {
          page: this.page,
          size: this.size,
          keyword: queryString
        }
      }).then(res => {
        if (res.data.count < this.size) {
          this.noMore = true
        }
        if (res.data.list.length > 0) {
          this.list = this.list.concat(res.data.list)
        } else {
          this.loading = false
        }
        cb(this.list)
        this.loading = false
      })
    },
    handleSelect(item) {
      console.log(item)
    }
  }
}
</script>

示例2

在这个示例中,我们通过 el autocomplete 实现了带有分页和上拉加载功能的功能。具体代码如下:

<template>
  <div class="autocomplete-demo">
    <el-autocomplete
      v-model="value"
      :fetch-suggestions="querySearchAsync"
      placeholder="请输入关键字"
      :debounce="300"
      @select="handleSelect"
      :loading="loading"
      :no-more="noMore"
    >
      <template slot-scope="{ item }">
        <div class="item">{{ item }}</div>
      </template>
    </el-autocomplete>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  data() {
    return {
      value: '',
      loading: false,
      noMore: false,
      list: [],
      page: 1,
      size: 10
    }
  },
  methods: {
    querySearchAsync(queryString, cb) {
      if (!queryString) {
        cb([])
        return
      }
      this.loading = true
      axios.get('/api/getList', {
        params: {
          page: this.page,
          size: this.size,
          keyword: queryString
        }
      }).then(res => {
        if (res.data.count < this.size) {
          this.noMore = true
        }
        if (res.data.list.length > 0) {
          this.list = this.list.concat(res.data.list)
        } else {
          this.loading = false
        }
        cb(this.list)
        this.loading = false
      })
    },
    handleSelect(item) {
      console.log(item)
    }
  },
  mounted() {
    this.$refs.autocomplete.$refs.input.addEventListener('keyup', (e) => {
      if (e.key === 'Enter') {
        this.page = 1
        this.list = []
        this.noMore = false
        this.loading = false
      }
    })
    this.$refs.autocomplete.$refs.popper.addEventListener('scroll', (e) => {
      const { scrollTop, clientHeight, scrollHeight } = e.currentTarget
      if (scrollTop + clientHeight >= scrollHeight - 20 && !this.loading && !this.noMore) {
        this.page++
        this.querySearchAsync(this.value, (list) => {})
      }
    })
  }
}
</script>

这里的示例代码使用 Vue.js 和 Element-UI 组件库,其中:

  • axios 用于发送 ajax 请求,获取数据
  • @select 用于监听用户的选中事件并返回选中的值
  • :debounce 属性用于设置用户输入时发送请求的时间间隔
  • :loading:no-more 属性用于判断是否正在加载数据、是否还有更多数据加载
  • @keyup 事件用于监听用户输入的回车键,并更新页面数据
  • @scroll 事件用于监听滚动事件,实现分页和上拉加载

以上就是关于如何使用el autocomplete进行分页上拉加载的详细攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:el autocomplete支持分页上拉加载使用详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 智联招聘忘记用户名和密码了怎么办?

    智联招聘忘记用户名和密码了怎么办? 在使用智联招聘过程中,有时会因为忘记用户名和密码而无法登录账号。下面提供两种方法来找回智联招聘账号: 方法一:通过注册邮箱找回 打开智联招聘登录界面:www.zhaopin.com。 点击右上角“登录”按钮,进入登录界面。 点击“忘记密码”,进入密码找回页面。 选择“用邮箱找回账号”选项,输入用户注册时填写的邮箱地址,并完…

    other 2023年6月27日
    00
  • 通过数据库向Django模型添加字段的示例

    添加数据库字段通常涉及以下步骤: 在你的模型中添加新字段 创建一个迁移文件并将其应用到数据库 下面是添加字段的示例: 示例1:向已有的模型添加一个新字段 例如,有一个名为Article的模型,现在需要给它添加一个tag字段。可以按照以下步骤进行: 在models.py中将tag字段添加到Article模型: class Article(models.Mode…

    other 2023年6月25日
    00
  • 总是听到有人说AndroidX,到底什么是AndroidX

    以下是关于AndroidX的详细攻略: AndroidX是什么? AndroidX是一个支持库的集合,旨在帮助开发者更轻松地构建Android应用。它提供了一组向后兼容的库,用于替代旧的Support库。AndroidX库的目标是提供更稳定、一致和功能丰富的开发体验。 AndroidX的优势 向后兼容性:AndroidX库提供了向后兼容的功能,使得开发者可以…

    other 2023年10月13日
    00
  • 深入理解Python变量与常量

    深入理解Python变量与常量攻略 1. 变量与常量的概念 在Python中,变量和常量是用来存储数据的标识符。它们在程序中起到了不同的作用。 变量:变量是可以改变的数据,它们的值可以在程序执行过程中被修改。在Python中,变量的值是可以被重新赋值的。 常量:常量是不可改变的数据,它们的值在程序执行过程中保持不变。在Python中,常量的值是不能被重新赋值…

    other 2023年7月28日
    00
  • js 浏览器版本及版本号判断函数2009年

    JS 浏览器版本及版本号判断函数攻略 在2009年,判断浏览器版本及版本号是一个常见的需求。下面是一个详细的攻略,包含了一个示例函数和两个示例说明。 1. 示例函数 function getBrowserVersion() { var userAgent = navigator.userAgent; var version; // 判断是否为IE浏览器 if…

    other 2023年8月3日
    00
  • 360随身wifi无法使用/无法加入网络等问题解决方法

    360随身wifi无法使用/无法加入网络等问题解决方法 问题描述 近年来,随着移动设备的普及和无线网络的普及,360随身wifi成为许多用户在移动设备上上网的常规工具。但是,有时候用户可能会遇到无法使用或无法加入网络等问题,本文将提供一些解决方法。 解决方法 1. 检查网络状况 首先,我们需要检查WiFi的信号强度和连接状态是否稳定。如果信号较弱或断开,则会…

    other 2023年6月26日
    00
  • C#开发Android百度地图手机应用程序(多地图展示)

    C#开发Android百度地图手机应用程序(多地图展示)攻略 概述 本攻略将介绍如何使用C#语言开发百度地图手机应用程序并进行多地图展示。百度地图SDK为开发者提供了众多的地图相关接口,支持语音识别、定位、地图渲染、搜索等多种功能。本攻略将着重介绍多地图展示的实现方法。 步骤 第一步:准备工作 1.下载并安装Visual Studio,建议使用最新版本。2.…

    other 2023年6月25日
    00
  • Bootstrap3.0学习笔记之栅格系统案例

    Bootstrap 3.0 学习笔记之栅格系统案例攻略 Bootstrap 是一个流行的前端开发框架,它提供了一套强大的栅格系统,用于创建响应式的网页布局。本攻略将详细介绍如何学习和使用 Bootstrap 3.0 的栅格系统,并提供两个示例说明。 1. 学习 Bootstrap 3.0 栅格系统 1.1 栅格系统概述 栅格系统是 Bootstrap 的核心…

    other 2023年7月28日
    00
合作推广
合作推广
分享本页
返回顶部