1. data(){
  2.        return {
  3.            goodsList:[], // 商品列表
  4.            priceFilter:[ // 价格区间数组
  5.                {
  6.                    startPrice:'0.00',
  7.                    endPrice:'100.00'
  8.                },
  9.                {
  10.                    startPrice:'100.00',
  11.                    endPrice:'500.00'
  12.                },
  13.                {
  14.                    startPrice:'500.00',
  15.                    endPrice:'1000.00'
  16.                },
  17.                {
  18.                    startPrice:'1000.00',
  19.                    endPrice:'5000.00'
  20.                }
  21.            ],
  22.            priceChecked:'all', // 选中的价格区间
  23.            filterBy:false, // 控制价格菜单的显示
  24.            overLayFlag:false, // 遮罩的显示
  25.  
  26.            sortFlag:true, // 排序:默认升序
  27.            page:1, // 当前第一页
  28.            pageSize:8, // 一页有8条数据
  29.  
  30.            busy:true, // 滚动加载插件默认禁用
  31.  
  32.            loading:false, // 往下滚动"加载图标"的出现效果
  33.  
  34.            mdShow:false, // 未登录的模态框是否显示
  35.            mdShowCart:false // 已登录的模态框是否显示
  36.        }
  37.    },
  38.    components:{
  39.        NavHeader,
  40.        NavFooter,
  41.        NavBread,
  42.        Modal
  43.    },
  44.    mounted:function(){
  45.        this.getGoodsList();
  46.    },
  47.    methods:{
  48.        getGoodsList(flag){
  49.            var param = {
  50.              page:this.page,
  51.              pageSize:this.pageSize,
  52.              sort:this.sortFlag ? 1 : -1 , // sortFlag为true升序
  53.              priceLevel:this.priceChecked // 点击的价格区间
  54.            }
  55.            this.loading = true;
  56.            axios.get("/goods/list",{
  57.              params:param // 传参
  58.            }).then((res)=>{
  59.                var res = res.data;
  60.                this.loading = false;
  61.                "){
  62.                  if(flag){ // true.商品数据累加
  63.                    this.goodsList = this.goodsList.concat(res.result.list);
  64.  
  65.                    if(res.result.count == 0){ // 0条数据了,就不加载滚动加载方法了
  66.                      this.busy = true; // 禁用
  67.                    }else{
  68.                      this.busy = false; // 启用
  69.                    }
  70.  
  71.                  }else{ // 只加载一页
  72.                    this.goodsList = res.result.list;
  73.                    this.busy = false;
  74.                  }
  75.                }else{
  76.                  this.goodsList = [];
  77.                }
  78.            })
  79.        },
  80.        sortGoods(){ // 点击排序商品
  81.          this.sortFlag = !this.sortFlag;
  82.          this.page = 1; // 点击价格排序后从第一页开始
  83.          this.getGoodsList(); // 重新加载数据
  84.        },
  85.        setPriceFilter(index){ // 点击价格
  86.            this.priceChecked = index;
  87.            this.closePop();
  88.            this.getGoodsList();
  89.        },
  90.        showFilterPop(){ // 点击filterBy出现价格菜单和遮罩
  91.            this.filterBy = true;
  92.            this.overLayFlag = true;
  93.        },
  94.        closePop(){ // 关闭价格菜单和遮罩
  95.            this.filterBy = false;
  96.            this.overLayFlag = false;
  97.        },
  98.        loadMore(){ // 滚动加载插件方法
  99.          this.busy = true; // 滚动就禁用,防止下一个滚动
  100.          setTimeout(() => { // 一个滚动完成之后再滚动加载下一个
  101.            this.page++;
  102.            this.getGoodsList(true); // 滚动加载是累加数据,并不是只显示一页数据,so需要传参去请求数据的地方判断一下
  103.          }, 500);
  104.        },
  105.        addCart(productId){ // 点击加入购物车
  106.          axios.post("/goods/addCart",{ // 接口设置在server/routes/goods.js
  107.            productId:productId
  108.          }).then((res)=>{
  109.            var res = res.data;
  110.            if(res.status==0){
  111.              //alert("加入成功")
  112.              this.mdShowCart = true; // 加入购物车成功,成功的模态框显示
  113.  
  114.              // 购物车数量加1
  115.              this.$store.commit('updateCartCount',1);
  116.            }else{
  117.              // alert("msg:"+res.msg)
  118.              this.mdShow = true; // 未登录模态框显示
  119.            }
  120.          })
  121.        },
  122.        closeModal(){ // 关闭模态框
  123.              this.mdShow = false; // 未登录模态框消失
  124.              this.mdShowCart = false; // 未登录模态框消失
  125.        }
  126.    }

Node.js后端代码

  1. // 查询商品列表数据
  2. /* GET goods page. */
  3. router.get('/list', function(req, res, next) {
  4.    // res.send('hello,goods list'); // 测试路由,连接成功页面出现'hello,goods list'
  5.  
  6.    // express获取请求参数
  7.    let page = parseInt(req.param("page")); // get请求数据拿到数据:res.param()
  8.    let pageSize = parseInt(req.param("pageSize"));
  9.    let priceLevel = req.param("priceLevel"); // 传过来的价格区间
  10.    let sort = req.param("sort");
  11.    let skip = (page-1)*pageSize; // 跳过的数据条数,(分页的公式).
  12.    var priceGt = '',priceLte = '';
  13.    let params = {};
  14.    if(priceLevel != 'all'){ // 价格区间过滤功能
  15.       switch (priceLevel){
  16.          case '0':priceGt=0;priceLte =100;break;
  17.          case '1':priceGt=100;priceLte =500;break;
  18.          case '2':priceGt=500;priceLte =1000;break;
  19.          case '3':priceGt=1000;priceLte =5000;break;
  20.       }
  21.       params = {
  22.          salePrice:{
  23.             $gt:priceGt,
  24.             $lte:priceLte
  25.          }
  26.       }
  27.    }
  28.    let goodsModel = Goods.find(params).skip(skip).limit(pageSize); // 先查询所有,skip(skip)跳过skip条数据,limit(pageSize)一页多少条数据.即分页功能实现
  29.    goodsModel.sort({'salePrice':sort}); // 对价格排序功能
  30.  
  31.    goodsModel.exec(function(err, doc){
  32.       if(err) {
  33.          res.json({
  34.             status:'1',
  35.             msg:err.message
  36.          })
  37.       }else{
  38.          res.json({
  39.             status:'0',
  40.             msg:'',
  41.             result:{
  42.                count:doc.length,
  43.                list:doc
  44.             }
  45.          })
  46.       }
  47.    })
  48.  
  49. });

Vue nodejs商城项目-商品列表页面组件的更多相关文章

  1. Vue nodejs商城项目-商品列表价格过滤和加入购物车功能

    一.价格过滤功能 GoodsList.vue >>点击价格区间时发送请求 methods:{     getGoodsList(flag){         var param = {   ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. AngularJS 实现 Table的一些操作(示例大于实际)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script ty ...

  2. HttpServletRequest的获取客户端真实IP

    摘自:http://chenyoulu.diandian.com/post/2012-11-14/40042540378 request方法客户端IP: request.getRemoteAddr() ...

  3. linux服务器时间自动同步

    最常用的是 rdate 服务 安装(centOs为例): yum install -y rdate 用法: rdate -s time-b.nist.gov 执行完以上方法时间就同步了.有的服务器隔一 ...

  4. union、except和intersect查询

    1. union联合查询  (合并) select r.room_id from room r union select rp.num from room_type rp 要求表1和表2的查询结果结构 ...

  5. 01.c#中的访问修饰符

    public  公开的 private 私有的,只能在当前类的内部访问 protected  受保护的,只能在当前内的内部以及该类的子类可以访问. internal    可以在同一个程序(项目)集中 ...

  6. 针对 IE的 的优化

    针对 IE 的优化 有些时候,你需要对 IE 浏览器的 bug 定义一些特别的规则,这里有太多的 CSS 技巧(hacks),我只使用其中的两种方法,不 管微软在即将发布的 IE7 beta 版里是否 ...

  7. Internet Of Things

  8. sql server 数据库代码备份及还原代码

    --备份 BACKUP DATABASE [库名称] TO DISK='E:\qq\ddd.bak' --备份并覆盖 BACKUP DATABASE [库名称] TO DISK='E:\qq\ddd. ...

  9. matlab练习程序(Hilbert图像置乱)

    正好刚写了Hibert生成曲线,不如再加一篇应用的程序. 关于Hilbert图像置乱,我在网上搜的应用领域主要集中在数字水印和图像加密上,而这两个领域我都没怎么接触过. 大部分的图像置乱都是如下图的置 ...

  10. tdf sample

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...