根据输入内容,去后台查询相关数据,每次返回20条数据,滑动到底部时增加索引(即页数)再去后台查询数据,将返回数据拼接在原数组后面。
【vue移动端|vue封装(上拉加载更多数据 )组件】1、封装组件
- {{ item.name }}
>
//封装的调用后台的查询接口方法
import { queryMaterial } from '@/api/serve'
export default {
props: {
//禁用状态
disabled: {
type: Boolean,
default: false
},
//表单的label名
title: {
type: String,
default: ''
},
//绑定值
name: {
type: String,
default: ''
}
},data() {
return {
dataList: [],
showPopup: false,
pageIndex: 1,
pageSize: 20
}
},
methods: {
queryData() {
const temp = {
name: this.name,
pageIndex: this.pageIndex,
pageSize: this.pageSize
}
queryMaterial(temp).then(res => {
//将返回的res数据拼接在dataList后面
this.dataList = [...this.dataList, ...res]
this.showPopup = true
console.log(res, '搜索返回值this.dataList==>', this.dataList)
})
},
// 给父组件传值将选择的数据传递给父组件
clickMaterial(data) {
this.$emit('selectMaterial', data)
},
//监听滚动事件
doButtom() {
// Element.scrollTop:元素内容垂直滚动的像素值
// Element.clientHeight:元素可见区域的整个的高度
// Element.scrollHeight:这个只读属性是一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容
if (this.$refs.materialUl.scrollTop + this.$refs.materialUl.clientHeight === this.$refs.materialUl.scrollHeight) {
console.log('触底了')
//判断是否已经加载完了全部数据,如果已经加载了全部数据则不再去请求接口获取数据
if (this.materialList.length < this.pageIndex * 20) return
this.pageIndex++
this.queryMaterial()
}
}
}
}
='scss' scoped>
ul{
height:500px;
overflow-y: scroll;
font-size: 0.44rem;
list-style: none;
padding-inline-start: 0;
margin-block-start: 0;
margin-block-end: 0;
li{
display: block;
padding: 0.285714rem;
border-bottom: 1px solid #D9D9D9;
}
}
2、使用组件
>
//引入组件
import queryMaterial from '@/views/components/queryMaterial/queryMaterial'
export default {
//注册组件
components: { 'query-material': queryMaterial },
data() {
return {
tit1: '名称',
form: {
id: null,
name: '',
}
}
},
methods: {
//接收到子组件传递过来的值
selectMaterial(data) {
console.log(data, '选择的数据')
},
}
}
='scss' scoped>
@import '@/styles/workOrder.scss';
推荐阅读
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- 接口|axios接口报错-参数类型错误解决
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- vue|Vue面试常用详细总结
- javascript|vue使用js-xlsx导出excel,可修改格子样式,例如背景颜色、字体大小、列宽等
- css|我用css精灵图拼接了自己的英文名字,不会还有人不知道精灵图技术吧()
- css|css三角的做法及其案例