vant下拉加载+动态查询

本文介绍了如何使用Vant UI库构建一个具有搜索、加载更多功能的列表页面。通过`<Search>`组件实现搜索功能,利用`<List>`和`<Cell>`展示数据列表,并在用户滚动到底部时自动加载更多数据。同时,文章展示了如何处理数据加载的状态,包括初始加载、加载中、加载结束等不同情况。
摘要由CSDN通过智能技术生成

效果图
在这里插入图片描述

	  <Search
	      v-model="searchValue"
	      placeholder="输入需要查询的信息名称"
	      @search="onSearch"
	      @input="onSearch"
	      @clear="onSearch"
	    />
      <div class="table">
	      <List v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
	        <Cell v-for="item in tableList" :key="item.id" @click="pushRecord(item)">
	          <div>{{item.title}}</div>
	          <div>
	            {{item.sendOrg}}
	            <span v-html="'\u00a0'"></span> 空格符号
	            <span v-html="'\u00a0'"></span>
	            {{item.sendDate&&item.sendDate.slice(0,10)}}
	          </div>
	        </Cell>
	      </List>
    </div>

JS
<script>
import { Search, List, Cell } from 'vant'
import { api } from '@/api/record.js'
export default {
  components: {
    Search,
    List,
    Cell
  },
  data() {
    return {
      loading: false,
      finished: false,
      tableList: [],
      searchValue: '',
      size: 10,
      page: 1,
      loadTag: 1
    }
  },
  methods: {
    /**
     * 搜索
     */
    onSearch() {
      this.getPlatLists('search')
    },

    onLoad() {
      if (this.loadTag == 1) {
        //请求接口得到数据给list数组
        this.getPlatLists('load')

        this.loadTag = 0
        setTimeout(() => {
          // 加载状态结束
          this.loading = false
        }, 500)
      }
    },
    getPlatLists(type) {
    // type 用来区分是搜索还是下拉
      api
        .getMessages({
          content: this.searchValue,
          page: type === 'search' ? 1 : this.page,
          size: this.size
        })
        .then((res) => {
          if (res.result.data.length === 0) {
            // 加载结束
            this.loading = false
            this.finished = true
            this.tableList = []
            return
          }
          if (type === 'load') {
            for (let i = 0; i < res.result.data.length; i++) {
              this.tableList.push(res.result.data[i])
            }
          } else {
            this.page = 1
            this.tableList = res.result.data
          }
          let total = res.result.totalSize
          let end = this.tableList.length
          if (end >= total) {
            this.loading = false
            this.finished = true
            this.loadTag = 0
            return
          } else {
            this.page++
            this.loadTag = 1
            this.loading = false
            this.finished = false
          }
        })
        .catch((err) => {
          this.finished = true
          console.log(err)
        })
    }
  }
}
</script>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值