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  Error 对象 错误处理
May 18 Javascript
javascript类继承机制的原理分析
Sep 12 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
javascript截取字符串小结
Apr 28 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
Nov 29 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
Nov 30 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
Jan 04 Javascript
简洁实用的BootStrap jQuery手风琴插件
Aug 31 Javascript
JS数组操作之增删改查的简单实现
Aug 21 Javascript
微信小程序视图template模板引用的实例详解
Sep 20 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
Jan 31 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
Bootstrap列表组学习使用
2017/02/09 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
Python配置文件处理的方法教程
2019/08/29 Python
python tornado修改log输出方式
2019/11/18 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
python实现图像全景拼接
2020/03/27 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
django正续或者倒序查库实例
2020/05/19 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
Python flask框架端口失效解决方案
2020/06/04 Python
Python 字符串池化的前提
2020/07/03 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
美国玩具公司:U.S.Toy
2018/05/19 全球购物
毕业实习个人鉴定范文
2013/12/10 职场文书
新学期班主任寄语
2014/01/18 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript