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 相关文章推荐
js 数组操作代码集锦
Apr 28 Javascript
js汉字转拼音实现代码
Feb 06 Javascript
纯JS实现动态时间显示代码
Feb 08 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
Dec 26 Javascript
JavaScript 实现的checkbox经典实例分享
Oct 16 Javascript
详解Vue 事件驱动和依赖追踪
Apr 22 Javascript
vue中element组件样式修改无效的解决方法
Feb 03 Javascript
Vue项目分环境打包的实现步骤
Apr 02 Javascript
JS实现的base64加密解密操作示例
Apr 18 Javascript
JavaScript实现与使用发布/订阅模式详解
Jan 19 Javascript
vue自动路由-单页面项目(非build时构建)
Apr 30 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
May 11 Javascript
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
基于mysql的bbs设计(三)
2006/10/09 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
跟老齐学Python之for循环语句
2014/10/02 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
python——全排列数的生成方式
2020/02/26 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
什么是Python中的顺序表
2020/06/02 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
日语专业毕业生求职信
2013/12/04 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
园林技术专业求职信
2014/07/28 职场文书
芙蓉镇观后感
2015/06/10 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
Java集成swagger文档组件
2021/06/28 Java/Android
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python