Vue nodejs商城项目-商品的分页、排序、筛选
、分页
,要查第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、排序
商品按价格排序主要是利用nodejs的mongoose中的sort函数对数据库查询结果按price关键字排序,之后返回给前端。在前端发送排序请求:
- sortPrice(){//按价格排序
- this.sortFlag=this.sortFlag==1?-1:1;
- this.page=1;
- this.getGoodsList();
- }
为升序,-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);
- 条数据,禁用滚动
- this.busy=true;
- }else{
- this.busy = false;
- }
- }else{
- this.goodsList=res.result.list;
- }
- }else{
- console.log("从服务器请求数据失败!");
- }
- });
服务器端处理:
- router.get('/',(req,res,next)=>{
- //获取请求参数
- 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将数据返回给get请求
- status:0,
- msg:'',
- result:{
- count:goodsDoc.length,
- list:goodsDoc
- }
- })
- }
- })
- });
Vue nodejs商城项目-商品的分页、排序、筛选的更多相关文章
- Vue nodejs商城项目-商品列表价格过滤和加入购物车功能
一.价格过滤功能 GoodsList.vue >>点击价格区间时发送请求 methods:{ getGoodsList(flag){ var param = { ...
- Vue nodejs商城项目-商品列表页面组件
data(){ return { goodsList:[], // 商品列表 priceFilter:[ // 价格区间数组 ...
- Vue nodejs商城项目-项目概述
项目概况 用vue2.0 +node.js +MongonDB 做了一个商城系统 技术选型 Vue2.0+node.js+express+MongoDB+axios+vuex 构建工具 Webpack ...
- Vue nodejs商城项目- 前后端数据传递
.利用Mongoose查询MongoDB 通过mongoose插件可以简捷地从mondodb中获取数据,首先安装mongoose: cnpm install mongoose --save 使用m ...
- Vue nodejs商城项目-登录模块
一.登录功能 后端server/routes/users.js var User = require('./../models/users.js'); // 二级路由 // 登录接口 router ...
- Vue nodejs商城项目-搭建express框架环境
1.express-project 搭建express框架环境 安装express generator生成器 通过生成器自动创建项目 配置分析 安装 cnpm i -g express-generat ...
- 11 Flutter仿京东商城项目 商品列表页面二级筛选导航布局
ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...
- 13 Flutter仿京东商城项目 商品列表筛选以及上拉分页加载更多
ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...
- 12 Flutter仿京东商城项目 商品列表页面请求数据、封装Loading Widget、上拉分页加载更多
ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...
随机推荐
- angular2 遇到的问题汇总
angular2 学习资源集锦:https://github.com/timjacobi/angular2-education 在学习angular开发项目过程遇到的问题: 1. 不同componen ...
- nyoj 139——我排第几个|| nyoj 143——第几是谁? 康托展开与逆康托展开
讲解康托展开与逆康托展开.http://wenku.baidu.com/view/55ebccee4afe04a1b071deaf.html #include<bits/stdc++.h> ...
- SpringBoot | 第三十一章:MongoDB的集成和使用
前言 上一章节,简单讲解了如何集成Spring-data-jpa.本章节,我们来看看如何集成NoSQL的Mongodb.mongodb是最早热门非关系数据库的之一,使用也比较普遍.最适合来存储一些非结 ...
- 利用request、beautifulsoup、xml写多线程爬虫
# -*- coding:UTF-8 -*- import requests,time from collections import OrderedDict import threading fro ...
- django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用
一.modelForm操作及验证 1.获取数据库数据,界面展示数据并且获取前端提交的数据,并动态显示select框中的数据 views.py from django.shortcuts import ...
- PHP配置错误信息回报的等级
Error_reporting:配置错误信息回报的等级 1 E_ERROR 致命的运行错误 2 E_WARNING 运行时警告( ...
- select支持多查询,获取分页count
在我们使用mybatis 时,当我们根据分页去查询数据集时,需要传入的参数有page(页码)和size(每页的条数),而我们期望获取到的数据有,小于或等于size的list数据集,同时我们还需要得到一 ...
- Jupyter Notebook(iPython)
一.Jupyter Notebook介绍 1.什么是Jupyter Notebook Jupyter Notebook是基于网页的用于交互计算的应用程序.其可被应用于全过编码开发.文档编写.运行代码和 ...
- python数据类型(集合)
一.集合概念 集合是一个数学概念:由一个或多个确定的元素所构成的整体叫做集合. 集合中的元素三个特征: 确定性(元素必须可hash) 互异性(去重)——将一个列表变为集合,就自动去重了 无序性(集合中 ...
- angular - webpack2 例子
用一周多的时间做了一个简易的wap站 之前研究过webpack但是一直没用过,这次公司要做一个h5网站,正好拿来练练手,话说angular1x对移动端不是很友好,但主要是angular1x比较熟悉,上 ...