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 相关文章推荐
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
Sep 02 Javascript
javascript格式化json显示实例分析
Apr 21 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
Aug 09 Javascript
jQuery如何获取动态添加的元素
Jun 24 Javascript
vue.js入门教程之绑定class和style样式
Sep 02 Javascript
Node.js Express 框架 POST方法详解
Jan 23 Javascript
jQuery EasyUI 页面加载等待及页面等待层
Feb 06 Javascript
微信小程序getPhoneNumber获取用户手机号
Sep 29 Javascript
vue组件父与子通信详解(一)
Nov 07 Javascript
jQuery pager.js 插件动态分页功能实例分析
Aug 02 jQuery
vue 自定义组件的写法与用法详解
Mar 04 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中正则表达式的使用方法描述
2008/07/30 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
详解PHP中的PDO类
2015/07/06 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
Laravel实现表单提交
2017/05/07 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
javascript分页代码(当前页码居中)
2012/09/20 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
Python魔术方法详解
2015/02/14 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
解读Django框架中的低层次缓存API
2015/07/24 Python
用pickle存储Python的原生对象方法
2017/04/28 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
python实现数字炸弹游戏
2020/07/17 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
《画风》教学反思
2014/04/16 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
被告答辩状范文
2015/05/22 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
如何在Python中创建二叉树
2021/03/30 Python
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android