商品列表分頁和排序功能實現


一、實現接口分頁功能:需要拿到前端的pageSize,page,sort參數

router.get("/", function (req, res, next) {
    //注意,通過req.param拿到的數據都是字符串,如果需要數字的話,就需要進行轉換
     

    // 拿到頁面參數
    let page = parseInt(req.param("page"));
    // 拿到當前一頁有多少條數據
    let pageSize = parseInt(req.param("pageSize"));
    // 通過req.param獲取前端傳過來的sort參數
    let sort = req.param("sort");
    //分頁的公式,skip就相當於索引值
    let skip = (page-1)*pageSize;
    let params = {};//定義一個空對象,假設find查詢是有條件的 
    // find可以返回一個模型,params作為查詢條件,,skip表示默認跳過多少條數據,limit獲取多少條數據
    let goodsModel = Goods.find(params).skip(skip).limit(pageSize);
    // console.log(goodsModel)
    // 調用sort方法,mongodb中,每一個條件都必須是對象
    goodsModel.sort({'salePrice':sort});
    // 不是普通的查詢,所以不能用find
    goodsModel.exec(function(err, doc) {
        if(err) {
            res.json({
                status: '1',
                msg: err.message
            });
        } else {
            res.json({
                status: '0',
                msg: '',
                result: {
                    count: doc.length,
                    list: doc
                }
            })
        }
    })
});

前端實現分頁和排序功能功能:

 data() {
        return {
            goodsList: [],
            priceFilter: [
              {
                startPrice: '0.00',
                endPrice: '500.00'
              },
              {
                startPrice: '500.00',
                endPrice: '1000.00'
              },
              {
                startPrice: '1000.00',
                endPrice: '3000.00'
              }
            ],
            // 控制當前選中的是哪一項
            priceChecked: 'all',
            filterBy: false, 
            overLayFlag: false ,//遮罩層

            sortFlag: true,//升序
            page:1,
            pageSize:8,//當前頁為八條數據
busy: true
} },

 

 //商品列表
       getGoodsList(){
        //定義param對象為想后台傳遞的參數
          var param = {
            page: this.page,
            pageSize: this.pageSize,
            sort: this.sortFlag ? 1 : -1
          }
          
        //  var url = "http://localhost:3000";
        //this.url + '/goods' 指的就是請求后端的http://localhost:3000/goods/
          axios.get(this.url + '/goods',{
            params: param
          }).then((response)=>{
            var res = response.data; 
            if(res.status == "0") {             
                  this.goodsList = res.result.list;
            } else {
              this.goodsList = [];
            }
          })      
       },
      //  商品列表排序
       sortGoods(){
          this.sortFlag = !this.sortFlag;
          this.page = 1;
          this.pageSize = 8;
          //調用getGoodsList向后台傳遞參數
          this.getGoodsList();
       },

三、利用vue-infinite-scroll插件實現無限加載功能(可以npmjs網址找到給插件)

//商品列表
       getGoodsList(flag){
        //定義param對象為想后台傳遞的參數
          var param = {
            page: this.page,
            pageSize: this.pageSize,
            sort: this.sortFlag ? 1 : -1
          }
          
        //  var url = "http://localhost:3000";
        //this.url + '/goods' 指的就是請求后端的http://localhost:3000/goods/
          axios.get(this.url + '/goods',{
            params: param
          }).then((response)=>{
            var res = response.data;
            // console.log(res)
            //  this.goodsList = res.result;
            //  console.log(this.goodsList)
            if(res.status == "0") {
              // this.goodsList = res.result.list;
              if(flag){
                //分頁數據需要累加
                  this.goodsList = this.goodsList.concat(res.result.list);
                  console.log(this.goodsList)
                  if(res.result.count == 0){
                      // 如果當前頁的數據條數為0,則停止加載
                      this.busy = true;
                  }else{
                      //否則
                      this.busy = false;
                  }
              }else{
                  //普通加載數據
                  this.goodsList = res.result.list;
                  this.busy = false;
              }
            } else {
              this.goodsList = [];
            }
          })      
       },
   
       //無限加載列表
       loadMore(){
         //在請求完成之前禁止瀏覽器再滾動加載
         console.log(1111)
         this.busy = true;  
         setTimeout(() => {
            this.page ++;
            //  傳遞true參數就是為了告訴getGoodsList函數,我們的分頁需要進行累加
            this.getGoodsList(true)
         },500);
       },

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM