当前位置: 首页 > news >正文

连云港市网站建设_网站建设公司_门户网站_seo优化

网站建设个人简历表达,苏州网站设计师招聘信息,网站开发设备费用计入什么科目,邀请推广app一、渲染购物车列表页面 新建src/views/Cart.vue获取cartList购物车列表数据就可以在页面中渲染出该用户的购物车列表数据 data(){ return { cartList:[] // 购物车商品列表 } }, mounted:function(){ this.init(); }, methods:{ init(){ // 初始化商品数据 axios.get(/users/…  一、渲染购物车列表页面 新建src/views/Cart.vue获取cartList购物车列表数据就可以在页面中渲染出该用户的购物车列表数据 data(){   return {      cartList:[] // 购物车商品列表   } }, mounted:function(){   this.init(); }, methods:{   init(){ // 初始化商品数据     axios.get(/users/cartList).then((response){       let res response.data;       this.cartList res.result;     })   } } 购物车接口server/routes/users.js // 查询当前用户的购物车数据 router.get(/cartList,function(req,res,next){     var userId req.cookies.userId;     User.findOne({userId:userId},function(err,doc){         if(err){             res.json({                 status:1,                 msg:err.message,                 result:             });         }else{             if(doc){                 res.json({                     status:0,                     msg:,                     result:doc.cartList                 })             }         }     }) }) 建立路由src/router/index.js import Cart from /views/Cart // 购物车列表 export default new Router({   routes: [     {       path: /cart, // 购物车列表路由       name: Cart,       component: Cart     }   ] }) 二、购物车商品删除功能 购物车删除接口server/routes/users.js // 购物车删除功能 router.post(/cartDel,function(req,res,next){     var userId req.cookies.userId,productId req.body.productId;     User.update({         userId:userId     },{         $pull:{             cartList:{                 productId:productId             }         }     },function(err,doc){         if(err){             res.json({                 status:1,                 msg:err.message,                 result:             });         }else{             res.json({                 status:0,                 msg:,                 result:suc             });         }     }) }); src/views/Cart.vue 点击删除图标模态框出现(导入模态Modal.vue子组件) !-- 删除图标 -- a hrefjavascript:; classitem-edit-btn clickdelCartConfirm(item.productId)     svg classicon icon-del         use xlink:href#icon-del/use     /svg /a !-- 模态框 -- Modal :mdShowmodalConfirm closecloseModal     p slotmessage你确认要删除此条数据吗/p     div slotbtnGroup         a hrefjavascript:; classbtn btn--m clickdelCart确认/a         a hrefjavascript:; classbtn btn--m clickmodalConfirm false关闭/a     /div /Modal import Modal from /components/Modal.vue // 模态框 export default {     data(){         return {           productId:,           modalConfirm:false // 模态框是否显示         }     },     components:{       Modal     },     methods:{       delCartConfirm(productId){ // 点击删除图标         this.productId productId;         this.modalConfirm true; // 模态框显示       },       closeModal(){ // 关闭模态框         this.modalConfirm false;       },       delCart(){ // 确认删除此商品         axios.post(/users/cartDel,{           productId:this.productId         }).then((response) {           let res response.data;           if(res.status 0){             this.modalConfirm false; // 关闭模态框             this.init(); // 重新初始化购物车数据           }         })       }     } } **** 在这里发现一个bug,在商品列表页点击加入购物车购物车页面新添加的商品数量和总价格是未定义。mongoose添加属性问题 这是后端接口处理的问题在server/routes/goods.js的加入到购物车接口中是从mongodb的数据库dumall的goods表根据商品id获取对应数据再对此商品数据添加productNum和checked属性之后再插入到users表的购物车列表中的。 属性没有添加成功在Goods模型中添加属性要去models/goods.js的Schema添加这两个属性。 server/models/goods.js // 定义一个Schema var produtSchema new Schema({    productId:String,    productName:String,    salePrice:Number,    productImage:String,     // 添加的属性     checked:String,     productNum:Number }) module.exports mongoose.model(good,produtSchema); 重新启动express(node server/bin/www) 三、购物车商品修改功能 商品加减和商品勾选 server/routes/users.js //修改商品数量接口 router.post(/cartEdit,function(req,res,next){     var userId req.cookies.userId,         productId req.body.productId,         productNum req.body.productNum,         checked req.body.checked;     User.update({ // 查询条件         userId:userId,         cartList.productId:productId     },{ // 修改的数据         cartList.$.productNum:productNum,         cartList.$.checked:checked     },function(err,doc){         if(err){           res.json({             status:1,             msg:err.message,             result:           });         }else{           res.json({             status:0,             msg:,             result:suc           });         }     }); }) src/views/Cart.vue !--选中图标-- a hrefjavascipt:; classcheckbox-btn item-check-btn v-bind:class{check:item.checked1} clickeditCart(checked,item)     svg classicon icon-ok         use xlink:href#icon-ok/use     /svg /a !--加减图标-- a classinput-sub clickeditCart(minu,item)-/a a classinput-add clickeditCart(add,item) /a methods:{     editCart(flag,item){         if(flag add){ // 添加商品数量           item.productNum ;         }else if(flag minu){ // 减少商品数量           if(item.productNum 1){             return;           }           item.productNum--;         }else{ // 商品控制选中           item.checked (item.checked1) ? 0 : 1;         }         axios.post(/users/cartEdit,{           productId:item.productId,           productNum:item.productNum,           checked:item.checked         }).then((response){           let res response.data;         })       } } 购物车全选和商品实时计算功能 全选和取消全选 server/routes/users.js //全选和取消全选 router.post(/editCheckAll,function(req,res,next){     var userId req.cookies.userId,       checkAll req.body.checkAll?1:0;     User.findOne({userId:userId},function(err,user){         if(err){           res.json({             status:1,             msg:err.message,             result:           });         }else{           if(user){             user.cartList.forEach((item){               item.checked checkAll;             })             user.save(function (err1,doc) {                 if(err1){                   res.json({                     status:1,                     msg:err1,message,                     result:                   });                 }else{                   res.json({                     status:0,                     msg:,                     result:suc                   });                 }             })           }         }     }) }) src/views/Cart.vue a hrefjavascipt:; clicktoggleCheckAll     span classcheckbox-btn item-check-btn v-bind:class{check:checkAllFlag}         svg classicon icon-okuse xlink:href#icon-ok//svg     /span     spanSelect all/span /a export default {     data(){         return {           checkAllFlag:false // 控制全选         }     },     methods:{       toggleCheckAll(){ // 全选和取消全选         this.checkAllFlag !this.checkAllFlag; // 取反         this.cartList.forEach((item){           item.checked this.checkAllFlag;         })         axios.post(/users/editCheckAll,{           checkAll:this.checkAllFlag         }).then((response){           let res response.data;           if(res.status0){             console.log(update suc);           }         })       }     } } 这里出现一个问题在点击select All全选之后显示正常但是刷新页面之后全选的图标没有显示全选因为全选的信息没有存储到数据库保存所以刷新之后就没有了。 【解决的办法】 用到了实时计算的computed功能实时计算的是属性只不过是函数的写法data里面就不用在声明了。 src/views/Cart.vue export default {     data(){         return {           // checkAllFlag:false // 控制全选         }     },     computed:{ // 实时计算的是属性只不过是函数的写法data里面就不用在声明了       checkAllFlag(){ // 是否全选属性         return this.checkedCount this.cartList.length; // 勾选的商品种数购物车商品列表的商品种数时返回true代表全选。       },       checkedCount(){ // 获取已勾选的商品种数(几种商品已勾选)         var i 0;         this.cartList.forEach((item){           if(item.checked1)i ;         });         return i;       }     },     methods:{       toggleCheckAll(){ // 全选和取消全选         // this.checkAllFlag !this.checkAllFlag;         // 不能使用这种写法了checkAllFlag是实时计算的属性如果true取反变成false之后还没来得及执行下面的所有商品取消勾选就实时计算了检测到勾选的商品种数购物车商品列表的商品种数,就又变成全选了。         var flag !this.checkAllFlag; // 声明变量取代         this.cartList.forEach((item){           item.checked flag ?1:0;         })         axios.post(/users/editCheckAll,{           checkAll:flag         }).then((response){           let res response.data;           if(res.status0){             console.log(update suc);           }         })       }     } } 页面一刷新就实时计算了 商品实时计算功能实现 这里也要用到computed计算属性 div classitem-total   Item total: span classtotal-price{{totalPrice}}/span /div computed:{     totalPrice(){ // 总价格属性         var money 0;         this.cartList.forEach((item){             if(item.checked1){                 money parseFloat(item.salePrice)*parseInt(item.productNum);             }         });         return money;     } } 接下来要对价格进行格式化vuex官网github有一个对购物车将格式化的函数https://github.com/vuejs/vuex/blob/dev/examples/shopping-cart/currency.js 可以拿过来对价格格式化在src/util/currency.js 格式化要用到过滤器可以在src/views/Cart.vue导入使用局部过滤器也可以在main.js使用全局过滤器 span classtotal-price{{totalPrice | currency($)}}/span // 局部过滤器 import {currency} from /util/currency.js filters:{   currency:currency // currency.js传过来的本就是函数 }, // 全局过滤器 import {currency} from ./util/currency Vue.filter(currency,currency); 更多专业前端知识请上 【猿2048】www.mk2048.com
http://www.lebaoying.cn/news/42099.html

相关文章:

  • 有专门做预算的网站没阿里云 网站托管
  • 合肥做网站排名开网店怎么开 新手
  • 上海建站网站简洁案例wordpress最近更新文章插件
  • 站长工具seo查询安阳网站设计哪家专业
  • 做的网站如何投入搜索引擎制作网页时用的最多的图像格式
  • 赣州网站建设设计通州网站建设全包
  • 网站群建设路径南京行业门户网站
  • 上海网站建设哪家专业郑州企业网站建设团队
  • 电子商务网站设计代做wordpress收件邮箱
  • 以下属于网站seo的内容是建设菠菜网站
  • 个人网站设计文字内容模板dedecms做自适应网站
  • 网站建设用户调研做企业网站需要提供什么
  • 哪些网站可以赚钱用v9做的网站上传服务器
  • 宜阳县网站建设ppt做视频模板下载网站有哪些内容
  • vps如何做网站微信 怎么上传 wordpress
  • 阿里云公司网站制作广告代理商公司
  • 泰安软件公司 泰安网站建设常德市住房和城乡建设局网站
  • 网站建设是什么意思 打不开广东网站建设公司有哪些
  • 江苏省住房保障建设厅网站天津谷歌优化公司
  • 住房城乡建设部 网站网站开发需要掌握哪些知识
  • .net 电子商务网站源码宝安网站建设-信科网络
  • 深圳效果好的免费网站建设做淘宝客网站用什么系统
  • 微信客户端网站建设网站 案例
  • 肥西县建设发展局网站专门做当归的网站
  • 网站加载速度慢嵌入式开发面试题
  • 如何开通属于自己的网站网站网页设计海报图片
  • 网站的建设背景图片社交平台推广
  • 鹤壁做网站多少钱w网站怎么做
  • 网站申请注册个域名2012版wordpress
  • vs2010如何做网站2023年招标公告