Vue nodejs商城项目-商品列表页面组件
- data(){
- return {
- goodsList:[], // 商品列表
- priceFilter:[ // 价格区间数组
- {
- startPrice:'0.00',
- endPrice:'100.00'
- },
- {
- startPrice:'100.00',
- endPrice:'500.00'
- },
- {
- startPrice:'500.00',
- endPrice:'1000.00'
- },
- {
- startPrice:'1000.00',
- endPrice:'5000.00'
- }
- ],
- priceChecked:'all', // 选中的价格区间
- filterBy:false, // 控制价格菜单的显示
- overLayFlag:false, // 遮罩的显示
- sortFlag:true, // 排序:默认升序
- page:1, // 当前第一页
- pageSize:8, // 一页有8条数据
- busy:true, // 滚动加载插件默认禁用
- loading:false, // 往下滚动"加载图标"的出现效果
- mdShow:false, // 未登录的模态框是否显示
- mdShowCart:false // 已登录的模态框是否显示
- }
- },
- components:{
- NavHeader,
- NavFooter,
- NavBread,
- Modal
- },
- mounted:function(){
- this.getGoodsList();
- },
- methods:{
- getGoodsList(flag){
- var param = {
- page:this.page,
- pageSize:this.pageSize,
- sort:this.sortFlag ? 1 : -1 , // sortFlag为true升序
- priceLevel:this.priceChecked // 点击的价格区间
- }
- this.loading = true;
- axios.get("/goods/list",{
- params:param // 传参
- }).then((res)=>{
- var res = res.data;
- this.loading = false;
- "){
- if(flag){ // 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;
- this.busy = false;
- }
- }else{
- this.goodsList = [];
- }
- })
- },
- sortGoods(){ // 点击排序商品
- this.sortFlag = !this.sortFlag;
- this.page = 1; // 点击价格排序后从第一页开始
- this.getGoodsList(); // 重新加载数据
- },
- setPriceFilter(index){ // 点击价格
- this.priceChecked = index;
- this.closePop();
- this.getGoodsList();
- },
- showFilterPop(){ // 点击filterBy出现价格菜单和遮罩
- this.filterBy = true;
- this.overLayFlag = true;
- },
- closePop(){ // 关闭价格菜单和遮罩
- this.filterBy = false;
- this.overLayFlag = false;
- },
- loadMore(){ // 滚动加载插件方法
- this.busy = true; // 滚动就禁用,防止下一个滚动
- setTimeout(() => { // 一个滚动完成之后再滚动加载下一个
- this.page++;
- this.getGoodsList(true); // 滚动加载是累加数据,并不是只显示一页数据,so需要传参去请求数据的地方判断一下
- }, 500);
- },
- addCart(productId){ // 点击加入购物车
- axios.post("/goods/addCart",{ // 接口设置在server/routes/goods.js
- productId:productId
- }).then((res)=>{
- var res = res.data;
- if(res.status==0){
- //alert("加入成功")
- this.mdShowCart = true; // 加入购物车成功,成功的模态框显示
- // 购物车数量加1
- this.$store.commit('updateCartCount',1);
- }else{
- // alert("msg:"+res.msg)
- this.mdShow = true; // 未登录模态框显示
- }
- })
- },
- closeModal(){ // 关闭模态框
- this.mdShow = false; // 未登录模态框消失
- this.mdShowCart = false; // 未登录模态框消失
- }
- }
Node.js后端代码
- // 查询商品列表数据
- /* GET goods page. */
- router.get('/list', function(req, res, next) {
- // res.send('hello,goods list'); // 测试路由,连接成功页面出现'hello,goods list'
- // express获取请求参数
- let page = parseInt(req.param("page")); // get请求数据拿到数据:res.param()
- let pageSize = parseInt(req.param("pageSize"));
- let priceLevel = req.param("priceLevel"); // 传过来的价格区间
- let sort = req.param("sort");
- let skip = (page-1)*pageSize; // 跳过的数据条数,(分页的公式).
- var priceGt = '',priceLte = '';
- let params = {};
- if(priceLevel != 'all'){ // 价格区间过滤功能
- switch (priceLevel){
- case '0':priceGt=0;priceLte =100;break;
- case '1':priceGt=100;priceLte =500;break;
- case '2':priceGt=500;priceLte =1000;break;
- case '3':priceGt=1000;priceLte =5000;break;
- }
- params = {
- salePrice:{
- $gt:priceGt,
- $lte:priceLte
- }
- }
- }
- let goodsModel = Goods.find(params).skip(skip).limit(pageSize); // 先查询所有,skip(skip)跳过skip条数据,limit(pageSize)一页多少条数据.即分页功能实现
- goodsModel.sort({'salePrice':sort}); // 对价格排序功能
- goodsModel.exec(function(err, doc){
- if(err) {
- res.json({
- status:'1',
- msg:err.message
- })
- }else{
- res.json({
- status:'0',
- msg:'',
- result:{
- count:doc.length,
- list:doc
- }
- })
- }
- })
- });
Vue nodejs商城项目-商品列表页面组件的更多相关文章
- Vue nodejs商城项目-商品列表价格过滤和加入购物车功能
一.价格过滤功能 GoodsList.vue >>点击价格区间时发送请求 methods:{ getGoodsList(flag){ var param = { ...
- Vue nodejs商城项目-商品的分页、排序、筛选
.分页 ,要查第3页的数据,则跳过2*8条数据,然后返回8条数据. 在实现滚动加载时,页面刚一加载完成并不需要请求所有数据,当用户下拉到页面底部时,再去请求数据并拼接到商品数据列表中. 通过vue-i ...
- 12 Flutter仿京东商城项目 商品列表页面请求数据、封装Loading Widget、上拉分页加载更多
ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...
- 11 Flutter仿京东商城项目 商品列表页面二级筛选导航布局
ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...
- Vue nodejs商城项目-项目概述
项目概况 用vue2.0 +node.js +MongonDB 做了一个商城系统 技术选型 Vue2.0+node.js+express+MongoDB+axios+vuex 构建工具 Webpack ...
- Vue nodejs商城项目-登录模块
一.登录功能 后端server/routes/users.js var User = require('./../models/users.js'); // 二级路由 // 登录接口 router ...
- 商城项目:商品列表ajax加载,ajax加入购物车--五张表的联合查询
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ProductLists.a ...
- 13 Flutter仿京东商城项目 商品列表筛选以及上拉分页加载更多
ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...
- Vue nodejs商城项目- 前后端数据传递
.利用Mongoose查询MongoDB 通过mongoose插件可以简捷地从mondodb中获取数据,首先安装mongoose: cnpm install mongoose --save 使用m ...
随机推荐
- javascript移动端滑屏事件
来看看在pc上面的几个事件:onmousedown,onmousemove,onmouseup 我相信大家对这几个事件一定不陌生,第一个onmousedown表示鼠标按下,第二个onmousemove ...
- RocketMQ3.2.6安装部署及调用
RocketMQ3.2.6安装部署及调用 1.RocketMQ部署架构 所有IP都是127.0.0.1,其中NameServer一个,Broker一个,Producer一个,Consumer一个 2. ...
- Visual Studio中C++项目编译常见问题总结
1. 工程引用外部头文件 工程->属性->配置属性->C/C++ ->常规->附加包含目录:输入头文件存放目录 2. 添加lib库引用 添加lib库的路径:工程-> ...
- BindingResult参数验证的跨层次迭代验证
public ResponseWrapper<Object> recordAdd(@RequestBody @Valid ReqAddEnterpriseInfoDTO addEnterp ...
- 关于C#的Lock锁思考
大家都知道多线程并发时候存在一个线程同步的问题,一般使用lock关键字来处理. lock关键字的结果如下: object locker=new object(); lock(locker) { ... ...
- HDU 5215 Cycle(dfs判环)
题意 题目链接 \(T\)组数据,给出\(n\)个点\(m\)条边的无向图,问是否存在一个奇环/偶环 Sol 奇环比较好判断吧,直接判是否是二分图就行了.. 偶环看起来很显然就是如果dfs到一个和他颜 ...
- HihoCoder#1279 : Rikka with Sequence(dp 枚举子集 二进制 神仙题)
题意 题目链接 Sol 不愧是dls出的比赛啊,265个交了题的人只有8个有分Orz 做完这题,,感觉自己的位运算dp姿势升华了... 首先最裸的dp应该比较好想,设\(f[i][j][k]\)表示前 ...
- Python爬虫《http和https协议》
一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...
- 最新一道面試題目,input: int[1,1,2,2,2,3,3,3],output [3,2,1],要求按照數字出現的次數從多到少排列元素。
面試當時沒有及時答出來,感覺當時在面試官的提示下跑偏了.想用兩個數組來mapping key和value然後對等排序,但是因為面試官讓用Array.sort而沒想好有什麼好辦法,結果可想而知.但是題目 ...
- 【Leetcode】【Easy】Add Binary
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...