视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于Vue框架vux组件库实现上拉刷新功能的介绍
2020-11-27 19:34:47 责编:小OO
文档


这篇文章主要为大家详细介绍了基于Vue框架vux组件库实现上拉刷新功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最近公司在研发app,选择了基于Vue框架的vux组件库,现总结在实现上拉刷新功能遇到的坑:
1.问题:只刷新一次,解决方法:需要自己手动重置状态
this.scrollerStatus.pullupStatus = ‘default',
2.问题:不能滚动,解决方法:因为启用keep-alive缓存,需要设置

activated () {
 this.$refs.scroller.reset()
}

如果还没效果,请在获取后台数据后,执行如下代码

this.$nxtTick(() => {
 this.$refs.scroller.reset()
 })

贴出整个页面的代码。

<template> 
 <p style="height:100%;">

 <x-header slot="header" :left-options="{showBack: false}" >会议列表 
 <a slot="right" v-on:click="show = true" > <icon type="search"></icon> </button> </a> 
 </x-header>

 <!-- 会议列表 -->
 <scroller v-model="scrollerStatus" height="-46" lock-x scrollbar-y ref="scroller" :bounce="isbounce" :use-pullup="showUp" :pullup-config="upobj" @on-pullup-loading="selPullUp" >
 <p class="box2">
 <p v-for="list, index in lists"> 
 <router-link :to="{ path: list.id } ">
 <p style="height:40px;"> 
 <span class="spanMeetTitle" v-html='(index+1) + " . " + list.name' ></span>
 <span class="spanMeetStatu" v-html='list.status'></span>
 </p> 
 <p class="prevSuper">
 <form-preview header-label="" header-value="" :bodyItems="list" :footer-buttons="buttons1"></form-preview>
 </p>
 </router-link> 
 <hr> 
 </p> 
 </p>
 </scroller>

 <!-- 导航 -->
 <Home></Home>

 <!-- 搜索 --> 
 <popup v-model="show" @on-hide="log('hide')" @on-show="log('show')" height="93%">
 <p class="popup0">
 <group> 
 <x-input v-model='meetName' placeholder="请输入“会议名称”搜索"></x-input> 
 <p style="float:left;margin-top: -36px;"><icon type="search"></icon></p> 
 </group>
 <!-- 
 <group> 
 <checklist :max=1 title="会议审批状态" required :options="commonList" v-model="checkStatus" @on-change="change"></checklist> 
 </group> -->

 <group title="会议审批状态">
 <radio :options="commonList" v-model="checkStatus" @on-change="change"></radio>
 </group>

 <group title="会议类型">
 <selector placeholder="请选择会议类型" v-model="checkType" :options="meetType"></selector>
 </group>

 <group title="召开时间">
 <flexbox>
 <flexbox-item>
 <p class="flex-demo" style="background-color:white;color:black;height:45px"> 
 <datetime title='' placeholder="请选择" v-model="startTime" format="YYYY-MM-DD HH:mm" @on-change="change" ></datetime>
 </p>
 </flexbox-item>
 至
 <flexbox-item>
 <p class="flex-demo" style="background-color:white;color:black;height:45px">
 <datetime title='' placeholder="请选择" v-model="stopTime" format="YYYY-MM-DD HH:mm" @on-change="change" ></datetime>
 </p>
 </flexbox-item>
 </flexbox> 
 </group>
 <br>
 <flexbox orient="vertical">
 <flexbox-item><p class="flex-demo" v-on:click="toSearch" >确定</p></flexbox-item>
 <flexbox-item><p class="flex-demo" v-on:click="show = false" style="background-color:white;color:black">取消</p></flexbox-item>
 </flexbox>

 </p>
 </popup>

 <toast v-model="showToast">已加载全部数据</toast>

 <loading v-model="isShowLoading" :text="textLoading"></loading>

 <alert v-model="isShowAlert" :title="AlertCongratulations" > {{ alertMessage }}</alert>
 </p>
</template>

<style type="text/css">
 .weui-form-preview__value{
 font-size: 1.1em !important;
 color: black;
 }
 .spanMeetTitle{
 float: left; 
 border-radius: 13px;
 padding:10px 6px; 
 font-size: 15px; 
 font-weight: bold;
 margin-left: 3px;
 color: black;
 }
 .spanMeetStatu{
 float: right;
 background-color: green;
 border-radius: 10px;
 padding:6px 5px;
 color: white;
 font-size: 13px;
 margin-top: 5px;
 }
 .flex-demo{
 height: 30px;padding-top: 5px; 
 }
 .selected{
 color: blue !important;
 background-color: transparent;
 }
 .popup0 {
 padding-bottom:15px;
 height:200px;
 }
 .popup1 {
 width:100%;
 height:100%;
 }
 .popup2 {
 padding-bottom:15px;
 height:400px;
 }
 .box1 {
 height: 100px;
 position: relative;
 width: 1490px;
 }
 .box1-item {
 width: 200px;
 height: 100px;
 background-color: #ccc;
 display:inline-block;
 margin-left: 15px;
 float: left;
 text-align: center;
 line-height: 100px;
 }
 .box1-item:first-child {
 margin-left: 0;
 }
 .box2-wrap {
 height: 300px;
 overflow: hidden;
 }
</style>

<script>
import { XHeader, Group, FormPreview, Tabbar, TabbarItem, Scroller, Icon, Popup, XSwitch, Toast, XInput, Checklist, Datetime, Flexbox, FlexboxItem, Selector, Loading, Alert, Radio } from 'vux'
import Home from './Home'

export default {
 components: {
 XHeader,
 Home,
 Group,
 FormPreview,
 Tabbar,
 TabbarItem,
 Scroller,
 Icon,
 Popup,
 XSwitch,
 Toast,
 XInput,
 Checklist,
 Datetime,
 Flexbox,
 FlexboxItem,
 Selector,
 Loading,
 Alert,
 Radio
 },
 data () {
 return {
 type: '1',
 PageIndex: 0,
 show: false,
 showToast: false,
 showloading: false,
 showUp: true,
 isbounce: false,
 isShowAlert: false,
 AlertCongratulations: '条件有误',
 textloading: '加载中',
 alertMessage: '‘召开时间' 不能大于 ‘结束时间'',
 value: '',
 meetName: '',
 startTime: '',
 stopTime: '',
 meetType: [],
 commonList: [{key: '20', value: '审批中'}, {key: '50', value: '审批通过'}, {key: '', value: '全部'}],
 checkStatus: '',
 checkType: '',
 commonList2: [],
 results: [],
 lists: [[]],
 buttons1: [{
 style: 'primary',
 text: '查看更多',
 link: '/Message'
 }],
 upobj: {
 content: '请上拉刷新数据',
 pullUpHeight: 60,
 height: 40,
 autoRefresh: false,
 downContent: '请上拉刷新数据',
 upContent: '请上拉刷新数据',
 loadingContent: '加载中...',
 clsPrefix: 'xs-plugin-pullup-'
 },
 isShowLoading: false,
 textLoading: '加载中',
 scrollerStatus: {
 pullupStatus: 'default'
 }
 }
 },
 mounted () {
 console.log(this.scrollerStatus.pullupStatus)
 this.getMeetList(true)
 this.getMeetType()
 this.$nextTick(() => {
 this.$refs.scroller.reset()
 })
 },
 methods: {
 log (str) {
 console.log(str)
 },
 getMeetList (isEmpty) {
 var APPROVE_STATUS = this.checkStatus
 var MEETING_TYPE = this.checkType
 this.isShowLoading = true
 this.$http.post(global.httpsUrl + '/Meet/GetMeetList', {'HumanId': global.userid, 'KEY': this.meetName, 'APPROVE_STATUS': APPROVE_STATUS, 'MEETING_TYPE': MEETING_TYPE, 'START_DATE': this.startTime, 'STOP_DATE': this.stopTime, 'PageIndex': this.PageIndex, 'PageSize': '2'}).then(response => {
 // sucess callback
 console.log('111')
 var data = response.body.Data
 if (isEmpty) {
 this.lists = []
 this.show = false
 } else {
 if (data && data.length === 0) {
 this.showToast = true
 this.isShowLoading = false
 this.scrollerStatus.pullupStatus = 'disabled' // 禁用下拉
 return
 }
 }
 for (var i = 0; i < data.length; i++) {
 if (data[i].APPROVE_STATUS < 20) {
 break
 }
 var personName = data[i].PERSION1_NAME
 if (personName && personName.length > 0) {
 personName = personName.substring(0, personName.indexOf('>'))
 }
 var meetlist = []
 var obj = {
 label: '地点',
 value: data[i].ADDRESS
 }
 meetlist.push(obj)
 obj = {
 label: '主持人',
 value: personName
 }
 meetlist.push(obj)
 obj = {
 label: '召开时间',
 value: global.formatDate.methods.toSet(data[i].ACT_START_TIME, 'yyyy-MM-dd HH:mm')
 }
 meetlist.push(obj)
 obj = {
 label: '会议类型',
 value: data[i].MEETING_TYPE_NAME
 }
 meetlist.push(obj)
 meetlist.id = 'FromMeet/' + data[i].MEETING_MINUTES_GUID + '/123'
 meetlist.name = data[i].MEETING_NAME
 var vstatus = '审批中'
 if (data[i].APPROVE_STATUS === 50) {
 vstatus = '审批通过'
 }
 meetlist.status = vstatus
 this.lists.push(meetlist)
 }
 this.isShowLoading = false
 if (!isEmpty) {
 this.scrollerStatus.pullupStatus = 'default'
 // this.$refs.scroller.reset()
 console.log(this.scrollerStatus.pullupStatus)
 this.$nextTick(() => {
 this.$refs.scroller.reset()
 })
 }
 }, response => {
 // error callback
 this.show = false
 })
 },
 showSearch () {
 this.show = true
 },
 change (val) {
 console.log('change', val)
 console.log(this.startTime)
 },
 change2 (val) {
 console.log('change', val)
 },
 resultClick () {
 },
 getResult () {
 },
 toSearch () {
 console.log(2222)
 if (this.startTime && this.stopTime && this.startTime > this.stopTime) {
 this.isShowAlert = true
 } else {
 this.PageIndex = 0
 this.getMeetList(true)
 }
 },
 selPullUp () {
 console.log('上拉刷新数据')
 this.PageIndex++
 this.getMeetList(false)
 },
 getMeetType () {
 this.$http.post(global.httpsUrl + '/Meet/GetMeetType').then(response => {
 // sucess callback
 var data = response.body.Data
 for (var i = data.length - 1; i >= 0; i--) {
 var obj = {
 key: data[i].TYPE_GUID,
 value: data[i].TYPE_NAME
 }
 this.meetType.push(obj)
 }
 }, response => {
 // error callback
 })
 }
 },
 activated () {
 this.$refs.scroller.reset()
 }
}
</script>

 <style lang="less">
@import '~vux/src/styles/1px.less';

.flex-demo {
 text-align: center;
 color: #fff;
 background-color: #20b907;
 border-radius: 4px;
 background-clip: padding-box;
}
</style>

下载本文
显示全文
专题