Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解


Posted in Javascript onDecember 07, 2019

本文实例讲述了Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能。分享给大家供大家参考,具体如下:

1、分页

商品列表的分页实现是后台根据前端请求的页面大小、页码位置,去数据库中查询指定位置的数据然后返回给前端。比如页面大小为8,要查第3页的数据,则跳过2*8条数据,然后返回接下来的8条数据。

实现滚动加载:页面刚一加载完成并不需要请求所有数据,只显示一部分。当用户下拉到页面底部时,再去请求数据并拼接到商品数据列表中。通过vue-infinite-scroll插件实现滚动加载,在框架末尾插入加载div,并且可以在其中放入加载动画

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

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

new Vue({
 el: '#app',
 data: {
  data: [],
  busy: false    //一开始不用加载
 },
 methods: {
  loadMore(){    //滚动加载操作
   this.busy = true;
   setTimeout(() => {
    this.page++;
    this.getGoodsList(true);
   }, 1000);
  }
 }
});

2、排序

商品按价格排序在服务器端实现,通过mongoose中的sort函数对数据库查询结果按price关键字排序,之后返回给前端。在前端发送排序请求:

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

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

3、按价格筛选

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

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

商品前端请求:

getGoodsList(split){
   let param={          //设置get请求的参数
    pageSize:this.pageSize,
    page:this.page,
    sortFlag:this.sortFlag,
    priceGt:this.priceGt,
    priceLt:this.priceLt
   };
   this.showLoading=true;     //启用加载svg动画
   axios.get("/goods",{
     params:param
   }).then(response =>{
    let res=response.data;
    if(res.status==0){
     if(split){         //split==true,需要滚动追加页数
      this.goodsList=this.goodsList.concat(res.result.list);
      if(res.result.count==0){  //返回0条数据,禁用滚动
       this.busy=true;
      }else{
       this.busy = false;
      }
     }else{
      this.goodsList=res.result.list;
     }
    }else{
     console.log("从服务器请求数据失败!");
    }
   });

服务器端处理:

router.get('/',(req,res,next)=>{
 //获取get请求中的参数
 let pageSize=parseInt(req.query.pageSize);
 let page=parseInt(req.query.page);
 let sortFlag=req.query.sortFlag;
 let skipPiece=(page-1)*pageSize;        //分页查询,跳过前面skip条数据
 let params={
  salePrice:{$gt:req.query.priceGt,$lt:req.query.priceLt}
 };
 //利用goods模板调用mongooseAPI进行数据库查询、排序、跳到指定页
 let goodsModel=goods.find(params).sort({'salePrice':sortFlag}).skip(skipPiece).limit(pageSize);
 goodsModel.exec((err,goodsDoc)=>{
  "use strict";
  if (err){
   res.json({
    status:1,
    msg:err.message
   })
  }else {
   res.json({                //利用res将查询结果返回
    status:0,
    msg:'',
    result:{
     count:goodsDoc.length,
     list:goodsDoc
    }
   })
  }
 })
});

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
javascript使用onclick事件改变选中行的颜色
Dec 30 Javascript
微信WeixinJSBridge API使用实例
May 25 Javascript
JS拖拽插件实现步骤
Aug 03 Javascript
js拖拽的原型声明和用法总结
Apr 04 Javascript
Bootstrap fileinput文件上传预览插件使用详解
May 16 Javascript
AngularJS 验证码60秒倒计时功能的实现
Jun 05 Javascript
webpack进阶——缓存与独立打包的用法
Aug 02 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
Nov 18 Javascript
angular中如何绑定iframe中src的方法
Feb 01 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
详解JWT token心得与使用实例
Aug 02 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
Nov 07 jQuery
JQuery样式与属性设置方法分析
Dec 07 #jQuery
JQuery常用简单动画操作方法回顾与总结
Dec 07 #jQuery
json解析大全 双引号、键值对不在一起的情况
Dec 06 #Javascript
js实现图片粘贴到网页
Dec 06 #Javascript
JavaScript中的函数申明、函数表达式、箭头函数
Dec 06 #Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
Dec 06 #Javascript
微信小程序实现滚动加载更多的代码
Dec 06 #Javascript
You might like
php关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
AngularJS快速入门
2015/04/02 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
Python如何合并多个字典或映射
2020/07/24 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
python生成word合同的实例方法
2021/01/12 Python
python SOCKET编程基础入门
2021/02/27 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
大学生个人总结的自我评价
2013/10/05 职场文书
料理师求职信
2014/01/30 职场文书
高校教师自荐信范文
2014/03/13 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
应用心理学专业求职信
2014/08/04 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL