鍍金池/ 問答/HTML/ 怎么在vue中使用mescroll+ajax實(shí)現(xiàn)上拉加載下拉刷新?

怎么在vue中使用mescroll+ajax實(shí)現(xiàn)上拉加載下拉刷新?

怎么使用mescroll+ajax實(shí)現(xiàn)上拉加載下拉刷新,mescroll官網(wǎng)給的例子一點(diǎn)都不詳細(xì),
我試著把官網(wǎng)給的例子粘貼到vue中,但是一直都報(bào)錯(cuò)。
<template>
<div>

<!-- 頭部 -->
<!-- <page-header></page-header> -->
<!-- 內(nèi)容 -->
<div class="container">
  <div id="mescroll" class="mescroll">
    <!--模擬的內(nèi)容-->
    <!-- <img src="img/beibei1.jpg"/>
        <img src="img/beibei2.jpg"/> -->
    <!--展示上拉加載的數(shù)據(jù)列表-->
    <ul id="dataList" class="data-list">
      <!--<li>
                <img class="pd-img" src="../res/img/pd1.jpg"/>
                <p class="pd-name">商品標(biāo)題商品標(biāo)題商品標(biāo)題商品標(biāo)題商品標(biāo)題商品</p>
                <p class="pd-price">200.00 元</p>
                <p class="pd-sold">已售50件</p>
            </li>-->
    </ul>
  </div>
</div>
<!-- 底部 -->
<!-- <page-footer></page-footer> -->

</div>
</template>
<script>
import MeScroll from 'mescroll.js'
import 'mescroll.js/mescroll.min.css'

// 公用

export default {

name: 'signin',
// 混入
//   mixins: [share],
data() {
  return {
    msg: 'signin',
    user: {}
  }
},
methods: {
  downCallback() {
    //加載輪播數(shù)據(jù)..
    //...
    //加載列表數(shù)據(jù)
    this.getListDataFromNet(0, 1, function (data) {
      //聯(lián)網(wǎng)成功的回調(diào),隱藏下拉刷新的狀態(tài)
      mescroll.endSuccess();
      //設(shè)置列表數(shù)據(jù)
      setListData(data, false);
    }, function () {
      //聯(lián)網(wǎng)失敗的回調(diào),隱藏下拉刷新的狀態(tài)
      mescroll.endErr();
    });
  },
  upCallback(page) {
    //聯(lián)網(wǎng)加載數(shù)據(jù)
    this.getListDataFromNet(page.num, page.size, function (curPageData) {
      //聯(lián)網(wǎng)成功的回調(diào),隱藏下拉刷新和上拉加載的狀態(tài);
      //mescroll會(huì)根據(jù)傳的參數(shù),自動(dòng)判斷列表如果無任何數(shù)據(jù),則提示空;列表無下一頁數(shù)據(jù),則提示無更多數(shù)據(jù);
      console.log("page.num=" + page.num + ", page.size=" + page.size + ", curPageData.length=" + curPageData.length);

      //方法一(推薦): 后臺(tái)接口有返回列表的總頁數(shù) totalPage
      //mescroll.endByPage(curPageData.length, totalPage); //必傳參數(shù)(當(dāng)前頁的數(shù)據(jù)個(gè)數(shù), 總頁數(shù))

      //方法二(推薦): 后臺(tái)接口有返回列表的總數(shù)據(jù)量 totalSize
      //mescroll.endBySize(curPageData.length, totalSize); //必傳參數(shù)(當(dāng)前頁的數(shù)據(jù)個(gè)數(shù), 總數(shù)據(jù)量)

      //方法三(推薦): 您有其他方式知道是否有下一頁 hasNext
      //mescroll.endSuccess(curPageData.length, hasNext); //必傳參數(shù)(當(dāng)前頁的數(shù)據(jù)個(gè)數(shù), 是否有下一頁true/false)

      //方法四 (不推薦),會(huì)存在一個(gè)小問題:比如列表共有20條數(shù)據(jù),每頁加載10條,共2頁.如果只根據(jù)當(dāng)前頁的數(shù)據(jù)個(gè)數(shù)判斷,則需翻到第三頁才會(huì)知道無更多數(shù)據(jù),如果傳了hasNext,則翻到第二頁即可顯示無更多數(shù)據(jù).
      mescroll.endSuccess(curPageData.length);

      //設(shè)置列表數(shù)據(jù)
      setListData(curPageData, true);
    }, function () {
      //聯(lián)網(wǎng)失敗的回調(diào),隱藏上拉加載的狀態(tài)
      mescroll.endErr();
    });
  },
  setListData(curPageData, isAppend) {
    var listDom = document.getElementById("dataList");
    for (var i = 0; i < curPageData.length; i++) {
      var pd = curPageData[i];

      var str = '<img class="pd-img" src="' + pd.pdImg + '"/>';
      str += '<p class="pd-name">' + pd.pdName + '</p>';
      str += '<p class="pd-price">' + pd.pdPrice + ' 元</p>';
      str += '<p class="pd-sold">已售' + pd.pdSold + '件</p>';

      var liDom = document.createElement("li");
      liDom.innerHTML = str;

      if (isAppend) {
        listDom.appendChild(liDom); //加在列表的后面,上拉加載
      } else {
        listDom.insertBefore(liDom, listDom.firstChild); //加在列表的前面,下拉刷新
      }
    }
  },
  getListDataFromNet(pageNum, pageSize, successCallback, errorCallback) {
    //延時(shí)一秒,模擬聯(lián)網(wǎng)
    setTimeout(function () {
      $.ajax({
        type: 'GET',
        url: '../../static/js/students.json',
        //                        url: '../res/pdlist1.json?num='+pageNum+'&size='+pageSize,
        dataType: 'json',
        success: function (data) {
          var listData = [];

          if (pageNum == 0) {
            //此處模擬下拉刷新返回的數(shù)據(jù)
            var i = Math.floor(Math.random() * data.length); //隨機(jī)取一個(gè)商品返回
            data[i].pdName = "【新增商品】 商品標(biāo)題";
            listData.push(data[i]);

          } else {
            //此處模擬上拉加載返回的數(shù)據(jù) (模擬分頁數(shù)據(jù))
            for (var i = (pageNum - 1) * pageSize; i < pageNum * pageSize; i++) {
              if (i == data.length) break;
              listData.push(data[i]);
            }
          }

          //回調(diào)
          successCallback(listData);
        },
        error: errorCallback
      });
    }, 2000)
  }
},
mounted() {
  //創(chuàng)建MeScroll對(duì)象,down可以不用配置,因?yàn)閮?nèi)部已默認(rèn)開啟下拉刷新,重置列表數(shù)據(jù)為第一頁
  //解析: 下拉回調(diào)默認(rèn)調(diào)用mescroll.resetUpScroll(); 而resetUpScroll會(huì)將page.num=1,再執(zhí)行up.callback,從而實(shí)現(xiàn)刷新列表數(shù)據(jù)為第一頁;
  var self = this;
  self.mescroll = new MeScroll("mescroll", { //請(qǐng)至少在vue的mounted生命周期初始化mescroll,以確保您配置的id能夠被找到
    down: {
      auto: false, //是否在初始化完畢之后自動(dòng)執(zhí)行下拉回調(diào)callback; 默認(rèn)true
      callback: this.downCallback //下拉刷新的回調(diào)
    },
    up: {
      auto: true, //初始化完畢,是否自動(dòng)觸發(fā)上拉加載的回調(diào)
      isBoth: true, //上拉加載時(shí),如果滑動(dòng)到列表頂部是否可以同時(shí)觸發(fā)下拉刷新;默認(rèn)false,兩者不可同時(shí)觸發(fā); 這里為了演示改為true,不必等列表加載完畢才可下拉;
      callback: this.upCallback, //上拉加載的回調(diào)
      isBounce: false, //此處禁止ios回彈,解析(務(wù)必認(rèn)真閱讀,特別是最后一點(diǎn)): http://www.mescroll.com/qa.html#q10
      toTop: { //配置回到頂部按鈕
        // src: "../res/img/mescroll-totop.png", //默認(rèn)滾動(dòng)到1000px顯示,可配置offset修改
        //offset : 1000
      }
    }
  });

  this.downCallback()
  // this.downCallback()

},
// 組件創(chuàng)建
created() {
  this.getListDataFromNet()

}

}
</script>
<style scoped>

</style>

clipboard.png
請(qǐng)大佬給指點(diǎn)指點(diǎn)

回答
編輯回答
離夢(mèng)

你把初始化的那段代碼放到nextTick函數(shù)中試下,其次你并沒有定義mescroll這個(gè)變量,你這個(gè)不報(bào)錯(cuò)就見鬼了。你mescroll前面應(yīng)該加this

2017年2月15日 11:08
編輯回答
心癌

樓上的你試了嗎。你是在mounted的時(shí)候?qū)escroll掛在了VM上,但是你調(diào)用的時(shí)候沒有使用this,你又不是箭頭函數(shù),所以this也不會(huì)指向VM,所以你要先緩存this,再使用。

clipboard.png

2017年8月27日 00:33
編輯回答
拽很帥

簡(jiǎn)單封裝了個(gè)組件可作參考

源碼:https://github.com/yimogit/vu...

預(yù)覽:https://vue-doc.yimo.link/gui...

2018年3月5日 07:21