zoukankan      html  css  js  c++  java
  • 使用vux实现上拉刷新的总结

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

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

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

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

    贴出整个页面的代码。

    <template> 
        <div 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" >
            <div 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> 
            </div>
           </scroller>
    
          <!-- 导航 -->
          <Home></Home>
    
          <!-- 搜索 --> 
          <popup v-model="show" @on-hide="log('hide')" @on-show="log('show')"  height="93%">
          <div class="popup0">
            <group>  
             <x-input v-model='meetName' placeholder="请输入“会议名称”搜索"></x-input> 
             <div style="float:left;margin-top: -36px;"><icon type="search"></icon></div> 
            </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>
                <div 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>
                </div>
                </flexbox-item>
    <flexbox-item>
                <div 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>
                </div>
                </flexbox-item>
              </flexbox> 
            </group>
           <br>
            <flexbox orient="vertical">
              <flexbox-item><div class="flex-demo" v-on:click="toSearch" >确定</div></flexbox-item>
              <flexbox-item><div class="flex-demo" v-on:click="show = false" style="background-color:white;color:black">取消</div></flexbox-item>
            </flexbox>
    
          </div>
        </popup>
    
        <toast v-model="showToast">已加载全部数据</toast>
    
        <loading v-model="isShowLoading" :text="textLoading"></loading>
    
        <alert v-model="isShowAlert" :title="AlertCongratulations" > {{ alertMessage }}</alert>
        </div>
    </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 {
        100%;
        height:100%;
      }
      .popup2 {
        padding-bottom:15px;
        height:400px;
      }
      .box1 {
        height: 100px;
        position: relative;
         1490px;
      }
      .box1-item {
         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('&gt;'))
              }
              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>
  • 相关阅读:
    【区间覆盖问题】uva 10020
    【Fibonacci】BestCoder #28B Fibonacci
    Struts2 用过滤器代替了 servlet ,???? 且不需要tomcat就可以直接做功能测试
    血的教训 password写成passward,教训应该从首页赋值 参数名
    为什么这个地方用重定向会报错.只能用 服务器跳转?? 为什么我加了过滤器,还是能直接登陆 servlet
    //可以不保存在session中, 并且前面我保存在request,这里session也可以获取 chain.doFilter(request, response); //只有登录名不为空时放行,防止直接登录 成功的页面
    request.setAttribute("username", username);//一定要保存,OGNL才能获取${username}
    form表单的提交地址一定要是完整的绝对地址
    登录页面jsp跳转到另一个jsp 与jsp-Servlet-jsp
    在Windows下MyEclipse运行JAVA程序连接HBASE读取数据出错
  • 原文地址:https://www.cnblogs.com/RuMengkai/p/6769184.html
Copyright © 2011-2022 走看看