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的执行顺序 之jQuery.html深度分析
Mar 03 Javascript
js在IE与firefox的差异集锦
Nov 11 Javascript
浅谈Unicode与JavaScript的发展史
Jan 19 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
Feb 27 Javascript
jquery结婚电子请柬特效源码分享
Aug 21 Javascript
JavaScript中的Number数字类型学习笔记
May 26 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 jQuery
JavaScript this在函数中的指向及实例详解
Oct 14 Javascript
基于form-data请求格式详解
Oct 29 Javascript
vue中实现弹出层动画效果的示例代码
Sep 25 Javascript
详解Node.js如何处理ES6模块
May 15 Javascript
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
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生成静态页
2006/11/25 PHP
PHP 日期加减的类,很不错
2009/10/10 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
jQuery 处理表单元素的代码
2010/02/15 Javascript
50个比较实用jQuery代码段
2011/09/18 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
Python中列表与元组的乘法操作示例
2018/02/10 Python
django 外键model的互相读取方法
2018/12/15 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
如何写一个自定义标签
2012/12/28 面试题
英语教学随笔感言
2014/02/20 职场文书
相亲活动方案
2014/08/26 职场文书
交通事故委托书范本
2014/09/28 职场文书
股东授权委托书
2014/10/15 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书