uView的Waterfall 瀑布流,实现单列,加载更多
这是根据uView的Waterfall 瀑布流来更改的,原组件是左右两列,本次更改主要是列表分页展示,结合官方文档以及此文章即可实现更改为单个数据,原组件是左右根目录下找到该组件进行更改uview-ui/components/u-waterfall/u-waterfall.vue在中间加入自己定义的all<template><view class="u-waterfall">
·
这是根据uView的Waterfall 瀑布流来更改的,原组件是左右两列,本次更改主要是列表分页展示,结合官方文档以及此文章即可实现
更改为单个数据,原组件是左右
根目录下找到该组件进行更改
uview-ui/components/u-waterfall/u-waterfall.vue
- 在中间加入自己定义的all
<template>
<view class="u-waterfall">
<view id="u-left-column" class="u-column"><slot name="left" :leftList="leftList"></slot></view>
<view id="u-right-column" class="u-column"><slot name="right" :rightList="rightList"></slot></view>
// 自己定义的单列
<view id="u-all-column" class="u-column u-all"><slot name="all" :allList="allList"></slot></view>
</view>
</template>
- splitData下更改即可
async splitData() {
if (!this.tempList.length) return;
let leftRect = await this.$uGetRect('#u-left-column');
let rightRect = await this.$uGetRect('#u-right-column');
let allRect = await this.$uGetRect('#u-all-column'); //获取id
if(!item) return ;
this.allList.push(item); //将数组拼接上去
},
- clear也要加
// 清空数据列表
clear() {
this.leftList = [];
this.rightList = [];
this.allList = []
// 同时清除父组件列表中的数据
this.$emit('input', []);
this.tempList = [];
},
- 样式
.u-all{
flex: unset !important;
width: 100%;
}
页面上的使用
<template>
<view>
<u-waterfall v-model="activeList" ref="uWaterfall">
<template v-slot:all="{allList}">
<view class="learnList">
<view class="item" v-for="(item,index) in allList" :key="index" @click="info(item)">
<text>{{item.noticeTitle}}</text>
</view>
</view>
</template>
</u-waterfall>
<u-loadmore bg-color="#fff" :status="loadStatus" @loadmore="getActiveList()"></u-loadmore>
</view>
</template>
<script>
export default {
data() {
return {
active: 0,
activeList: [],
loadStatus: 'loadmore',
// 分页
page: {
num: 0,
limit: 10
},
moreStatus: true, // 判断是否触底的时候还需要刷新
};
},
onLoad() {
this.getActiveList()
},
onReachBottom() {
// 如果依然还有数据,就出发
if (this.moreStatus == true) {
this.loadStatus = 'loading';
// 模拟数据加载
setTimeout(() => {
this.getActiveList();
this.loadStatus = 'loadmore';
}, 1000)
}
},
methods: {
select(index) {
this.active = index;
// 有选项卡的情况
this.page.num = 0;
this.$refs.uWaterfall.clear();
this.moreStatus = true
this.loadStatus = 'loadmore';
this.getActiveList()
},
getActiveList() {
this.page.num++;
this.$u.get("/system/notice/list", {
noticeType: this.tabCate[this.active].id,
pageNum: this.page.num,
pageSize: this.page.limit
}).then(res => {
if (res.code == 200) {
let resData = res.rows
// 拼接数组
this.activeList = this.activeList.concat(resData)
// 如果数组为空,或者已经请求完毕,更改更多加载的状态
if (resData.length == 0 || res.total <= this.activeList.length) {
this.moreStatus = false
this.loadStatus = 'nomore';
}
}
})
},
}
}
</script>
<style lang="scss">
</style>
- 自定义uView的组件,用起很方便的,主要是复用性很高
- 虽然样式看起来比较简洁,不过总体来说,中等一点的项目,很实用
更多推荐
已为社区贡献5条内容
所有评论(0)