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

下面是详细讲解“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日

相关文章

  • python中jieba库的安装方法

    以下是关于Python中jieba库的安装方法的完整攻略,包括基本知识和两个示例说明。 基本知识 jieba是一个中文分词,它可以将中文文本分割成单个词语。在Python中使用jieba库可以方便进行中文文本处理。在安装jieba库之前,需要确保已经安装了Python环境。 示例说明 以下是两个Pythonjieba库的安装方法的示例: 示例1:使用pip …

    other 2023年5月7日
    00
  • 安卓/iPhone手机qq5.0内测申请地址 安卓/iPhoneQQ5.0体验版申请下载地址

    安卓/iPhone手机QQ5.0内测申请地址攻略 1. 了解内测申请地址 在申请安卓/iPhone手机QQ5.0内测之前,我们需要了解内测申请地址。内测申请地址是指我们可以提交申请以获取内测版本的QQ5.0的网址或应用商店链接。 2. 寻找内测申请地址 2.1 安卓手机QQ5.0内测申请地址 对于安卓手机用户,我们可以通过以下步骤找到安卓手机QQ5.0内测申…

    other 2023年8月4日
    00
  • 苹果2019秋季发布会:硬件照常升级 软件服务愈发重要

    苹果2019秋季发布会: 硬件照常升级 软件服务愈发重要 简介 苹果每年秋季都会举行一次发布会,向全球展示他们最新的产品和技术。2019年秋季发布会也不例外,苹果在这次发布会上继续升级他们的硬件产品线,并强调软件服务的重要性。 硬件升级 苹果在2019秋季发布会上推出了一系列硬件产品的升级,包括: iPhone 11系列:苹果发布了iPhone 11、iPh…

    other 2023年8月5日
    00
  • [Asp.Net Core]提高开发效率的方法

    提高开发效率的方法 在Asp.Net Core开发中,有一些方法可以帮助提高开发效率。下面是一些可以考虑的方法和示例说明: 1. 使用代码生成工具 代码生成工具可以帮助自动生成重复性的代码,减少手动编写的工作量。一个常用的代码生成工具是Scaffolding,它可以根据数据库模型自动生成控制器、视图和数据访问层代码。 示例说明: dotnet aspnet-…

    other 2023年7月27日
    00
  • 如何利用Java使用AOP实现数据字典转换

    当使用Java编程语言时,可以利用AOP(面向切面编程)的概念来实现数据字典转换。下面是一个完整的攻略,包含两个示例说明: 1. 引入依赖 首先,需要在项目的构建文件(如pom.xml)中引入AOP相关的依赖,例如Spring AOP或AspectJ。 <dependency> <groupId>org.springframework…

    other 2023年10月18日
    00
  • mysql水平分表和垂直分表的优缺点

    MySQL水平分表和垂直分表的优缺点 在MySQL数据库中,为提高数据的存储和查询效率,有时候需要对表进行分表操作。根据分表的方式,可分为水平分表和垂直分表两种。 1. 水平分表 水平分表是将一个表按照一定的规则拆分成多个表,每个表的结构完全一样,只是数据不同。比如按照用户ID取模的方式,将用户表中的数据分散到多个物理表中。 优点 提高数据存储性能,减轻单个…

    其他 2023年3月28日
    00
  • mac安装jdk及环境变量配置文件

    下面是macOS操作系统中安装JDK及环境变量配置文件的完整攻略。 安装JDK 首先访问Oracle官网的JDK下载页面 https://www.oracle.com/java/technologies/javase-downloads.html,找到所需版本的JDK并点击下载。 等待下载完成后,双击下载的 “.dmg” 安装包文件。安装向导将引导您完成安装…

    other 2023年6月27日
    00
  • 注册表禁止打开软件、组策略禁止电脑安装软件、电脑禁止打开一切程序的方法

    要禁止打开软件或安装软件,可以通过修改注册表或组策略来实现。同时,也可以通过禁止打开一些特定的程序来限制用户的使用权限。下面分别介绍这三种方法的操作步骤。 方法一:注册表禁止打开软件 步骤一:打开注册表 在 Windows 操作系统中,按下 Win+R 快捷键打开运行窗口,输入 regedit 并回车,打开注册表编辑器。 步骤二:定位设置项 在注册表编辑器中…

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