一、价格过滤功能

GoodsList.vue

  1. >>点击价格区间时发送请求
  2. methods:{
  3.     getGoodsList(flag){
  4.         var param = {
  5.             // 请求时传点击的价格区间数据给后台
  6.             priceLevel:this.priceChecked // 点击的价格区间
  7.         }
  8.         ......
  9.     },
  10.     setPriceFilter(index){ // 点击价格
  11.         this.priceChecked = index;
  12.         this.closePop();
  13.         this.getGoodsList(); // 发送请求
  14.     },
  15. }

server/routes/goods.js 
获取传过来的参数,对价格参数进行处理,查询价格区间内的数据库数据

  1. // 二级路由
  2. /* GET goods page. */
  3. router.get('/', function(req, res, next) {
  4.    // express获取请求参数
  5.    let priceLevel = req.param("priceLevel"); // 传过来的价格区间
  6.    var priceGt = '',priceLte = '';
  7.    let params = {};
  8.    if(priceLevel != 'all'){ // 价格区间过滤功能
  9.       switch (priceLevel){
  10.          case '0':priceGt=0;priceLte =100;break;
  11.          case '1':priceGt=100;priceLte =500;break;
  12.          case '2':priceGt=500;priceLte =1000;break;
  13.          case '3':priceGt=1000;priceLte =5000;break;
  14.       }
  15.       params = {
  16.          salePrice:{
  17.             $gt:priceGt,
  18.             $lte:priceLte
  19.          }
  20.       }
  21.    }
  22.    ......
  23. });

往下滚动分页加载图标效果

  1. <!-- 加载中... -->
  2. <img v-show="loading" src="/static/loading-svg/loading-spinning-bubbles.svg" alt="">
  3.  
  4. export default {
  5.     data(){
  6.         return {
  7.             loading:false
    // 往下滚动"加载图标"的出现效果:默认不出现
  8.         }
  9.     },
  10.     methods:{
  11.         getGoodsList(flag){
  12.             this.loading = true; // 请求前出现
  13.             axios.get("/goods",{
  14.               params:param // 传参
  15.             }).then((res)=>{
  16.                 var res = res.data;
  17.                 this.loading = false; // 请求到数据图标消失
  18.                 "){
  19.                     ......
  20.                 }
  21.             })
  22.         }
  23.     }
  24. }

二、加入购物车功能

dumall数据库建立users集合导入resource文件夹的dumall-users 

与商品列表接口一样,先建立用户数据的模型 
server/models/users.js

  1. // 对应数据库用户数据在resource文件夹的dumall-users
  2. var mongoose = require('mongoose');
  3. var Schema = mongoose.Schema;
  4.  
  5. // 定义一个Schema
  6. var userSchema = new Schema({
  7.    'userId':String, // 或者 'userId':{type:String}
  8.    'userName':String,
  9.    'userPwd':String,
  10.    'orderList':Array,
  11.     'cartList':[ // 购物车列表
  12.         {
  13.             "productId":String,
  14.             "productName":String,
  15.             "salePrice":Number,
  16.             "productImage":String,
  17.             "checked":String, // 是否选中
  18.             "productNum":String // 商品数量
  19.         }
  20.     ],
  21.     "addressList":Array
  22. })
  23.  
  24. // 输出(导出)
  25. module.exports = mongoose.model('user',userSchema); // 定义一个user模型,可以根据这个模型调用其API方法。
  26. // 这个模型定义的是数据库dumall的users集合数据,所以这个model取名user是对应这个集合,连接数据库之后,这个模型会根据名字的复数形式"users"来查找数据集合。
  27. // module.exports = mongoose.model('user',userSchema,'users'); 也可以后面注明链接的是数据库的goods集合

数据库链接(之前商品列表页已连接),查询操作用户数据,建立接口,实现加入购物车功能 server/routes/goods.js

  1. // 加入到购物车
  2. // 是二级路由,一级路由在app.js
  3. router.post("/addCart",function(req, res, next){
  4.   var userId = '100000077',
  5.     productId = req.body.productId; // post请求拿到res参数:req.body
  6.   var User = require('../models/users.js'); // 引入user模型
  7.  
  8.   // 查询第一条:拿到用户信息
  9.   User.findOne({
  10.     userId:userId // 查询条件
  11.   },function(err,userDoc){
  12.     if(err){
  13.       res.json({
  14.         status:"",
  15.         msg:err.message
  16.       })
  17.     }else{
  18.       console.log("userDoc"+userDoc); // 用户数据
  19.       if(userDoc){
  20.         let goodsItem = '';
  21.         userDoc.cartList.forEach(function(item){ // 遍历用户购物车,判断加入购物车的商品是否已经存在
  22.           if(item.productId == productId){
  23.             goodsItem = item;
  24.             item.productNum++; // 购物车这件商品数量+1
  25.           }
  26.         })
  27.         if(goodsItem){ // 若购物车商品已存在
  28.           userDoc.save(function (err2,doc2) {
  29.             if(err2){
  30.                 res.json({
  31.                     status:"",
  32.                     msg:err2.message
  33.                 })
  34.             }else{
  35.                 res.json({
  36.                     status:'0',
  37.                     msg:'',
  38.                     result:'suc'
  39.                 })
  40.             }
  41.           })
  42.         }else{ // 若购物车商品不存在,就添加进去
  43.           Goods.findOne({productId:productId},function(err1,doc){ // 从商品列表页Goods查询点击加入购物车的那件商品信息
  44.             if(err1){
  45.               res.json({
  46.                 status:"",
  47.                 msg:err1.message
  48.               })
  49.             }else{
  50.               if(doc){
  51.                 doc.productNum = 1;
  52.                 doc.checked = 1;
  53.                 userDoc.cartList.push(doc); // 添加信息到用户购物车列表中
  54.                 userDoc.save(function(err2,doc2){ // 保存数据库
  55.                   if(err2){
  56.                     res.json({
  57.                       status:"",
  58.                       msg:err2.message
  59.                     })
  60.                   }else{
  61.                     res.json({
  62.                       status:"",
  63.                       msg:'',
  64.                       result:'suc'
  65.                     })
  66.                   }
  67.                 })
  68.               }
  69.             }
  70.           })
  71.         }
  72.       }
  73.     }
  74.   })
  75. })

页面实现加入购物车请求实现 GoodsList.vue

  1. <!--传入商品id参数-->
  2. <a href="javascript:;" class="btn btn--m" @click="addCart(item.productId)">加入购物车</a>
  3.  
  4. methods:{
  5.     addCart(productId){ // 点击加入购物车
  6.         axios.post("/goods/addCart",{ // 接口设置在server/routes/goods.js
  7.             productId:productId
  8.         }).then((res)=>{
  9.             var res = res.data;
  10.             if(res.status==0){
  11.                 alert("加入成功")
  12.             }else{
  13.                 alert("msg:"+res.msg)
  14.             }
  15.         })
  16.     }
  17. }

运行项目,点击购物车,请求成功,数据库购物车列表变化

  • © 2018 GitHub, Inc.

Vue nodejs商城项目-商品列表价格过滤和加入购物车功能的更多相关文章

  1. Vue nodejs商城项目-商品列表页面组件

    data(){        return {            goodsList:[], // 商品列表            priceFilter:[ // 价格区间数组          ...

  2. Vue nodejs商城项目-商品的分页、排序、筛选

    .分页 ,要查第3页的数据,则跳过2*8条数据,然后返回8条数据. 在实现滚动加载时,页面刚一加载完成并不需要请求所有数据,当用户下拉到页面底部时,再去请求数据并拼接到商品数据列表中. 通过vue-i ...

  3. Vue nodejs商城项目-项目概述

    项目概况 用vue2.0 +node.js +MongonDB 做了一个商城系统 技术选型 Vue2.0+node.js+express+MongoDB+axios+vuex 构建工具 Webpack ...

  4. Vue nodejs商城项目-登录模块

    一.登录功能 后端server/routes/users.js var User = require('./../models/users.js');   // 二级路由 // 登录接口 router ...

  5. 13 Flutter仿京东商城项目 商品列表筛选以及上拉分页加载更多

    ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...

  6. 12 Flutter仿京东商城项目 商品列表页面请求数据、封装Loading Widget、上拉分页加载更多

    ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...

  7. 11 Flutter仿京东商城项目 商品列表页面二级筛选导航布局

    ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...

  8. 商城项目:商品列表ajax加载,ajax加入购物车--五张表的联合查询

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ProductLists.a ...

  9. Vue nodejs商城项目- 前后端数据传递

    .利用Mongoose查询MongoDB 通过mongoose插件可以简捷地从mondodb中获取数据,首先安装mongoose: cnpm install mongoose --save   使用m ...

随机推荐

  1. Java学习第二十天

    1:递归(理解) (1)方法定义中调用方法本身的现象 举例:老和尚给小和尚讲故事,我们学编程 (2)递归的注意事项: A:要有出口,否则就是死递归 B:次数不能过多,否则内存溢出 C:构造方法不能递归 ...

  2. 【学习笔记】Java实用类:枚举(Enum)

    Java API(Java Application Programming Interface)Java应用程序编程接口... 实用类:Java API提供了几个常用包: 1.java.lang:编写 ...

  3. ACM-线段树扫描线总结

    扫描线的基础概念可以看这几篇文章 http://blog.csdn.net/xingyeyongheng/article/details/8927732 http://www.cnblogs.com/ ...

  4. Spring课程 Spring入门篇 4-4 Spring bean装配(下)之Autowired注解说明3 多选一 qualifier

    本节主要讲述以下内容: 1 简述 2 代码演练 2.1 注解qualifier运用 1 简述 1.1 何种情况使用qualifier注解? a 按类型自动装配多个bean实例,可以用@qualifie ...

  5. 原生js封装十字参考线插件(一)

    需求来源: 拓扑图之机房平面图,显示机房长宽比例尺,房间内标注各种设备间距不易实现,特在机房平面图上层加一个十字参考线 横竖两条线垂直,在鼠标指针处交叉,显示鼠标指针坐标(相对机房平面图的坐标,不是相 ...

  6. Angular选项卡

    前几天我发的东西,可能对于没有基础的人很难理解,那么今天,咱们就发点简单点的东西吧! Angular显示隐藏,选项卡! 还是那句话,话不多说,上代码: <!DOCTYPE html> &l ...

  7. git取消本地commit

    如果不小心commit了一个不需要commit的文件,可以对其进行撤销. 先使用git log 查看 commit日志 commit 422bc088a7d6c5429f1d0760d008d86c5 ...

  8. MySQL远程连接:Host 'x' is not allowed to connect to this MySQL server

    远程连接MySQL时发现如下错误: java.sql.SQLException: null, message from server: "Host '192.168.30.23' is no ...

  9. 【起航计划 031】2015 起航计划 Android APIDemo的魔鬼步伐 30 App->Preferences->Advanced preferences 自定义preference OnPreferenceChangeListener

    前篇文章Android ApiDemo示例解析(31):App->Preferences->Launching preferences 中用到了Advanced preferences 中 ...

  10. html 表格单元格的宽度和高度的设置

    做网页的时候,经常会碰到表格宽度对不齐的问题.详细地看了html中表格标签table的高度和宽度设置的细节,现总结如下: 1.table中的width和height设置及其作用:table中设置的he ...