、分页

,要查第3页的数据,则跳过2*8条数据,然后返回8条数据。

在实现滚动加载时,页面刚一加载完成并不需要请求所有数据,当用户下拉到页面底部时,再去请求数据并拼接到商品数据列表中。

通过vue-infinite-scroll插件实现滚动加载,在框架末尾插入加载div,并且可以在其中放入加载动画

  1. <div v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10">  
  2.   <img v-if="showLoading" src="../../static/loading-svg/loading-spinning-bubbles.svg">//加载动画  
  3. </div>  

通过busy可以控制是否启用加载,在loadMore函数中定义你的加载操作,然后通过setTimeout按时间间隔响应加载请求

  1. new Vue({  
  2.   el: '#app',  
  3.   data: {  
  4.     data: [],  
  5.     busy: false  
  6.   },  
  7.   methods: {  
  8.     loadMore(){//滚动加载插件  
  9.       this.busy = true;  
  10.       setTimeout(() => {  
  11.         this.page++;  
  12.         this.getGoodsList(true);  
  13.       }, 1000);  
  14.     }  
  15.   }  
  16. });  

2、排序

商品按价格排序主要是利用nodejs的mongoose中的sort函数对数据库查询结果按price关键字排序,之后返回给前端。在前端发送排序请求:

  1.     sortPrice(){//按价格排序  
  2.       this.sortFlag=this.sortFlag==1?-1:1;  
  3.       this.page=1;  
  4.       this.getGoodsList();  
  5.     }  

为升序,-1降序,排序之后需要将页码置1,然后再去请求商品列表

3、按价格筛选

后端根据前端请求的最大值(priceGt)、最小值(priceLt)去数据库中查询指定价位之间的商品并返回给前端,利用mongoose的查询find函数中的params参数中设置$gt,$lt查询指定区间的商品

  1. let params={  
  2.     salePrice:{$gt:req.query.priceGt,$lt:req.query.priceLt}  
  3.   };  

商品前端请求:

  1. getGoodsList(split){  
  2.       let param={//get请求的参数  
  3.         pageSize:this.pageSize,  
  4.         page:this.page,  
  5.         sortFlag:this.sortFlag,  
  6.         priceGt:this.priceGt,  
  7.         priceLt:this.priceLt  
  8.  };  
  9.       this.showLoading=true;         //启用加载svg动画  
  10.       axios.get("/goods",{  
  11.           params:param  
  12.       }).then(response =>{  
  13.         let res=response.data;  
  14.         if(res.status==0){  
  15.           if(split){                //split==true,需要滚动追加页数  
  16.             this.goodsList=this.goodsList.concat(res.result.list);  
  17. 条数据,禁用滚动  
  18.               this.busy=true;  
  19.             }else{  
  20.               this.busy = false;  
  21.             }  
  22.           }else{  
  23.             this.goodsList=res.result.list;  
  24.           }  
  25.         }else{  
  26.           console.log("从服务器请求数据失败!");  
  27.         }  
  28.       });  

服务器端处理:

  1. router.get('/',(req,res,next)=>{  
  2.   //获取请求参数  
  3.   let pageSize=parseInt(req.query.pageSize);  
  4.   let page=parseInt(req.query.page);  
  5.   let sortFlag=req.query.sortFlag;  
  6.   let skipPiece=(page-1)*pageSize;//分页查询,跳过前面skip条数据  
  7.   let params={  
  8.     salePrice:{$gt:req.query.priceGt,$lt:req.query.priceLt}  
  9.   };  
  10.     
  11.   //利用goods模板调用mongooseAPI进行数据库查询、排序、跳到指定页  
  12.   let goodsModel=goods.find(params).sort({'salePrice':sortFlag}).skip(skipPiece).limit(pageSize);  
  13.   goodsModel.exec((err,goodsDoc)=>{  
  14.     "use strict";  
  15.     if (err){  
  16.       res.json({  
  17.         status:1,  
  18.         msg:err.message  
  19.       })  
  20.     }else {  
  21.       res.json({//利用res将数据返回给get请求  
  22.         status:0,  
  23.         msg:'',  
  24.         result:{  
  25.           count:goodsDoc.length,  
  26.           list:goodsDoc  
  27.         }  
  28.       })  
  29.     }  
  30.   })  
  31. });  

Vue nodejs商城项目-商品的分页、排序、筛选的更多相关文章

  1. Vue nodejs商城项目-商品列表价格过滤和加入购物车功能

    一.价格过滤功能 GoodsList.vue >>点击价格区间时发送请求 methods:{     getGoodsList(flag){         var param = {   ...

  2. Vue nodejs商城项目-商品列表页面组件

    data(){        return {            goodsList:[], // 商品列表            priceFilter:[ // 价格区间数组          ...

  3. Vue nodejs商城项目-项目概述

    项目概况 用vue2.0 +node.js +MongonDB 做了一个商城系统 技术选型 Vue2.0+node.js+express+MongoDB+axios+vuex 构建工具 Webpack ...

  4. Vue nodejs商城项目- 前后端数据传递

    .利用Mongoose查询MongoDB 通过mongoose插件可以简捷地从mondodb中获取数据,首先安装mongoose: cnpm install mongoose --save   使用m ...

  5. Vue nodejs商城项目-登录模块

    一.登录功能 后端server/routes/users.js var User = require('./../models/users.js');   // 二级路由 // 登录接口 router ...

  6. Vue nodejs商城项目-搭建express框架环境

    1.express-project 搭建express框架环境 安装express generator生成器 通过生成器自动创建项目 配置分析 安装 cnpm i -g express-generat ...

  7. 11 Flutter仿京东商城项目 商品列表页面二级筛选导航布局

    ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...

  8. 13 Flutter仿京东商城项目 商品列表筛选以及上拉分页加载更多

    ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...

  9. 12 Flutter仿京东商城项目 商品列表页面请求数据、封装Loading Widget、上拉分页加载更多

    ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...

随机推荐

  1. ionic 打包安卓包 (debug调试版和 release发布版)

    一.配置环境: 先按照之前的文章,配置好环境需要: 安装jdk,配置环境变量:( http://www.cnblogs.com/loveyaxin/p/7520618.html) 安装android- ...

  2. Java Collection.Set

    package 集合; /** * Set不包含重复元素 存储顺序和取出数据不一样 * * HashSet:它不保证set的迭代顺序,特别是它不保证该顺序恒久不变 * 底层是哈希表结构的 * Link ...

  3. django(6)model表语句操作、Form操作、序列化操作

    1.model建表操作之创建索引.元数据 # 单表操作,创建表 class User(models.Model): name = models.CharField(max_length=32) ema ...

  4. springboot+mybatis实现登录功能,返回json

    1.新建maven项目(pom) <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

  5. FontSize sp 和 dp 的区别

    dp不会随着“设置->显示->字体大小”的改变而改变,sp会. sp会随着configeration的配置来scale, dp不会. 所以,什么时候用sp, 什么时候用dp需要斟酌.

  6. python之高阶函数filter

    原文 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返 ...

  7. tomcat server 报错之 More than the maximum allowed number of cookies

    More than the maximum allowed number of cookies EVERE: Error processing request java.lang.IllegalArg ...

  8. ssh整合(spring + struts2 + hibernate)xml版

    1.1分层 1.2jar节点 <dependencies> <dependency> <groupId>junit</groupId> <arti ...

  9. LARAVEL学习--安装

    之前一直使用Codeignitor框架进行PHP的开发,Codeignitor是一个非常优秀的框架,上手简单,文档极其友好,流行程度甚高(这带来了很好的社区支持+云环境支持),很轻量,可扩展性佳,性能 ...

  10. SQL Server ->> 生成代码把表字段从NULL改为NOT NULL

    一般我们用SELECT .... INTO语句生成的表字段都是允许为NULL.而如果我们需要改成NOT NULL呢 select 'ALTER TABLE dbo.XXXXXXX ALTER COLU ...