您现在的位置是:网站首页> 编程资料编程资料
vant中list的使用以及首次加载触发两次解决问题_vue.js_
2023-05-24
346人已围观
简介 vant中list的使用以及首次加载触发两次解决问题_vue.js_
vant中list使用及首次加载触发两次
以下是list的基本使用方法,主要原理就是当页面数据小于offset这个高度的时候,就会触发load,在load里面需要调用接口发送下一页的数据.所以发送完毕后需要将设置分页的属性加一,并将获取到的新值push进接收数据的数组里,而不是直接赋值,如果直接赋值那么数组里就只有新值,之前的值就被覆盖.
调用完以后将loading的样式关闭,并且判断数据库中还有没有数据,如果没有,就将finished为true,表示已经加载完毕了.
首次加载触发两次解决问题
1.在mounted或者create调用,原因是有可能在数据没回来的时候load就监测到数据低于高度,也发送了一次,等到数据回来时已经请求两次了.所以干脆不需要调用,交给load检测即可.
2.offset过于高,默认的高度是300,有一次获取数据一次只获取5条,虽然覆盖了页面高度,但稍作触碰就会二次发送.
3.请求的数据过少,请求的数据不足以覆盖页面就会二次加载,可以看文档list第一条示例便是.
vant中list列表组件使用
List 的运行机制:
List 会监听浏览器的滚动事件并计算列表的位置,当列表底部与可视区域的距离小于offset时,List 会触发一次 load 事件。
1. 基础结构
// 循环列表数据 {{item}}循环出来的数据2.data声明: data() { return { loading: false, // 是否处在加载状态 finished: false, // 是否已加载完成 error: false, // 是否加载失败 list: [], // 数据项 page: 1, // 分页 page_size: 10 // 每页条数 total: 0 // 数据总条数 } }3.methods定义方法
methods: { onLoad() { // 异步更新数据 // setTimeout 仅做示例,真实场景中一般为 ajax 请求 setTimeout(() => { for (let i = 0; i < 10; i++) { this.list.push(this.list.length + 1); } // 加载状态结束 this.loading = false; // 数据全部加载完成 if (this.list.length >= 40) { this.finished = true; } }, 1000); }, }, };4.调用api渲染页面
导入这个接口 import { } from '@/api/xxx.js'
async onLoad () { const res = await 接口方法名(this.channel.id, Date.now()) // 获取的数据 const arr = res.data.data.results // 它是一个数组 // 1. 追加数据到list // 对数组进行展开 this.list.push(...arr) // 2. 把loading设置为false this.loading = false // 3. 判断是否所有的数据全部加载完成,如果是:finished设为true if (arr.length === 0) { // 说明取不到数据了 this.finished = true } // 4. 页面上提示一下用户 this.$toast.success('成功加载数据') }loading 和 finished 分别是什么含义?
List有以下三种状态,理解这些状态有助于你正确地使用List组件:
- 非加载中,loading为false,此时会根据列表滚动位置判断是否触发load事件(列表内容不足一屏幕时,会直接触发)
- 加载中,loading为true,表示正在发送异步请求,此时不会触发load事件
- 加载完成,finished为true,此时不会触发load事件
在每次请求完毕后,需要手动将loading设置为false,表示加载结束
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
相关内容
- React从插槽、路由、redux的详细过程_React_
- vue中关于$emit和$on的使用及说明_vue.js_
- Vue中的directive指令快速使用_vue.js_
- 微信小程序使用onreachBottom实现页面触底加载及分页效果_javascript技巧_
- JavaScript闭包原理与使用介绍_javascript技巧_
- JavaScript函数式编程示例分析_javascript技巧_
- JavaScript 弱引用强引用底层示例详解_javascript技巧_
- 关于vue混入(mixin)的解读_vue.js_
- Vue组件与生命周期详细讲解_vue.js_
- DS-SDK封装ThreeJS的三维场景核心库Viewer_js其它_
点击排行
本栏推荐
