说在前面

从接触微信小程序到第一次动手实现一个商城小程序,我发现我们怕的不是不会写,而是不敢动手去写,每个人都是从无到有,所以勇敢踏出我们的第一步吧,看官方文档去吧骚年!

踏出第一步吧

说的简单,那怎么踏出去呢?在这里我来分享下我写商城小程序遇到的一些问题,踩得一些坑。

1、商城小程序的轮播实现

小程序的轮播图实现真是太方便了swiper,就是这么简单粗暴。一个滑块视图容器,说的简单,那我们得注意什么呢 swiper-item仅可放在</swiper>组件中 indicatorDots: false,用来设置有无轮播点,autoplay: false,设置自动播放。wx:for设置图片的循环。具体的可以点点这里看看。

<swiper class="swiper" indicator-dots="true" autoplay="true" interval="5000" duration="1000"><block wx:for="{{movies}}" wx:for-index="index" wx:key="index"><swiper-item><image src="{{item}}" class="slide-image" /></swiper-item></block></swiper>

我在这里直接设置了轮播状态,图片放在js里遍历。

2、搜索方法

如何实现小程序的搜索呢,我在这里使用的是正则遍历搜索,在这里就遇到了一个坑
js 匹配字符串的方法有很多
在开始的时候我直接使用 search()方法

var n = str.search("Runoob");

使用这个方法我一直匹配不了,上网看文档发现使用这个方法会直接把输入值看成字符串,这样就导致搜索的难以实现,那怎么办?放弃是不可能放弃的,那咱继续干吧,又是一波查资料,最终发现可以使用test()函数 RegExpObject.test(string)来实现输入值的遍历匹配

<view class='search'><view class='search-value'><input placeholder='搜索商品' value='{{searchVal}}' bindconfirm="search" bindinput="bindKeyInput"></input><view class='clear' wx:if="{{ searchVal != '' }}" bindtap='clear'><image src='../../images/clear.png'></image></view></view><view class='search-button' bindtap='search'><image src='../../images/search.png'></image></view>
</view>
search: function(){// var pattern = /和/;// var str = "和";// console.log(str.search(pattern));var tem=[];for(var i=0;i<this.data.goods.length;i++){var re = new RegExp(this.data.searchVal);if(re.test(this.data.goods[i].title)){tem.push(this.data.goods[i]);}}this.setData({goods : tem })
},

这样我们就实现了搜索匹配。

3.商品如何加入购物车?

既然咱是一个商城类小程序,那怎么加入购物车呢?mvvm模式

在加入之前我们是不是有一个疑问,我在购物车界面怎么能获取你商品的信息啊?好难啊?怎么去做呢?使用mvvm模式
他是将逻辑层数据中的name与视图层的name进行了绑定,当逻辑层中name的值发生变化的时候,视图层的值也会随之变化。然后视图层的点击事件changeName也是和逻辑层的changeName绑定的,当点击视图按钮的时候,逻辑层的changeName方法会响应并改变逻辑层的数据,视图层的数据又随之变化。说的好像很叼啊,具体怎么做呢?咱还是不太清楚啊

来,我们继续聊。

不能忘了还有个app.js这个全局js在这里发挥了中转站的作用

 globalData: {cartList: [], }

在app.js里面定义一个全局的空数组,在购物车取值时,我们先把值赋给这个空数组,在取这个值,这样的话我们就可以得到这个值。话不多说,看看效果

那代码是如何实现的呢?

addCart: function () {var good = this.data.good_info;var cartList = app.globalData.cartList;var cartItem = {id: good.id,name: good.title,url: good.image,price: good.price,num: 1,select: 'circle',};//判断购物车为空if (cartList.length > 0) {//不为空var index = null;//记录id商品在购物车的下标for (let i = 0; i < cartList.length; i++) {if(good.id == cartList[i].id){index = i;}}//如果index等于null,说明第二次添加id商品不在购物车里,直接Push进去if(index == null){cartList.push(cartItem);}else{//index不等于Null,那么第二次添加id商品在购物车,num++cartList[index].num++;}} else {//购物车为空直接Push进去cartList.push(cartItem);}// console.log(cartList);wx.showToast({title: '添加成功',icon: 'success',duration: 2000})}
})

在这里我想说的是如何实现逻辑呢?开始我遇到一个问题,第二次添加相同商品时不会再数量上加一,而是由添加了一个新的商品,那么如何解决这个问题呢?我们使用了for循环的嵌套判断
在数据中遍历一次,然后再比较选出商品id做比较再一次遍历,然而 又遇到一个问题,第一个商品遍历出来,第二个商品选数量时却导致遍历出错,难受,那么逻辑如何解决呢?
将addCart方法的逻辑重构

    第一步还是判断购物车是否为空,保证第一件添加商品成功第二步,不为空的情况,定义一个索引index然后,遍历购物车数组,如果good.id==cartList[i].id,把这个i复制给index遍历完成后对index判断如果index==null,说明第二次添加商品不在购物车,直接push进去如果不为空,说明第二次添加的商品在购物车,将cartList[index].num++

这样就解决逻辑问题。

4、购物车功能的实现

购物车功能有哪些呢?分析下,商品的勾选,价格的计算,总价计算,全选功能。来
让我们一一实现。

再这里封装一个总价,方便调用。
遍历数组,把即选的num 加起来。

countNum: function () {var that = this//遍历数组,把既选中的num加起来var newList = that.data.listvar allNum = 0for (var i = 0; i < newList.length; i++) {if (newList[i].select == "success") {allNum += parseInt(newList[i].num)}}parseIntconsole.log(allNum)that.setData({num: allNum})},//计算金额方法count: function () {var that = this//思路和上面一致//选中的订单,数量*价格加起来var newList = that.data.listvar newCount = 0for (var i = 0; i < newList.length; i++) {if (newList[i].select == "success") {newCount += newList[i].num * newList[i].price}}that.setData({count: newCount})},

再来判定全选

allSelect: function (e) {var that = this//先判断现在选中没var allSelect = e.currentTarget.dataset.selectvar newList = that.data.listif (allSelect == "circle") {//先把数组遍历一遍,然后改掉select值for (var i = 0; i < newList.length; i++) {newList[i].select = "success"}var select = "success"} else {for (var i = 0; i < newList.length; i++) {newList[i].select = "circle"}var select = "circle"}that.setData({list: newList,allSelect: select})//调用计算数目方法that.countNum()//计算金额that.count()},

不管咱ui有多丑,该有的逻辑咱都有。

5、商品的分类

商品分类中主要是根据商品id判断选择类别,在这里参考了林鑫大神的分类。这里就不多废话,主要是界面的设计

6、用户我的table功能的实现

在这里我想说的是兄弟,在这里咱可以偷下懒了,为什么这么说呢?咱有微信UI
不bb直接上地址https://github.com/Tencent/weui-wxss

同时在这方面有赞也有个,老规矩https://github.com/youzan/zanui-weapp

7、咱还会遇到哪写问题呢?

页面的跳转问题

你是不是有时候命名绑定了页面却跳转不过去呢?是的,有的,那为什么会出现这种情况呢?
官方文档写的很清楚

  • 跳转tabBar
{"tabBar": {"list": [{"pagePath": "index","text": "首页"},{"pagePath": "other","text": "其他"}]}
}wx.switchTab({url: '/index'
})
  • 跳转应用内界面 wx.navigateTo
wx.navigateTo({url: 'test?id=1'
})//test.js
Page({onLoad: function(option){console.log(option.query)}
})
  • 跳转刷新主页
wx.reLaunch({url: 'test?id=1'
})//test.js
Page({onLoad: function(option){console.log(option.query)}
})

咱具体的可以看看文档

前端数据怎么得?

有时候我们并不能得到数据,写在代码里有显得太冗余,不怕试试Easy mock自己写个假数据。

scoll-view scoll-x scoll-y

scoll-y大家都知道scoll-x其实就是横向划屏,需要注意的是图片问题。

说再多都是虚的咱贴个gitHub地址


既然都看到这里了,咱点个赞再关注一波吧老铁。
代码当然还有很多不足的地方,还有很多功能需要完善,作为一个年轻的程序猿,咱也算走出了第一步,俗话说万事开头,摇摇晃晃的总得有个开始
作为前端小白技术当然不是很好,希望在这里有你们的陪伴,我一点点记录,你们一点点见证。

你幸福吗? 幸福西饼小程序来袭相关推荐

  1. 二手车微信小程序来袭

    随着人们生活水平不断的提高,每家每户都有了汽车,有的甚至不止一辆.在汽车销售商的利润来源中,售后服务占50%,汽车销售占10%,零部件销售占10%,二手车经营占20%,这说明二手车业务至少占有汽车后市 ...

  2. 入华商用四周年,Office 365小程序在路上

    ​ 微软市值已经在2018年4月17日那周初就悄然超越谷歌母公司Alphabet,成为仅次于苹果的全球第二大市值公司.投资银行摩根士丹利分析师凯什·韦斯(Keith Weiss)曾在2018年3月下旬 ...

  3. 微信小程序、微信小游戏作品汇总合集,各种好玩的小程序

    微信小程序.微信小游戏作品汇总合集,各种好玩的小程序 小程序: 微信小程序:易阅小程序作品展示 微信小程序:幸福磁县小程序作品展示 微信小程序:小说精品榜小程序作品展示 微信小程序:武汉智慧交警小程序 ...

  4. “十年磨一剑”酷客多智慧连锁版小程序重磅来袭

    众位期盼已久的酷客多智慧连锁正式上线,相信一直关注我们的合作伙伴或多或少都了解到了一些信息,那么此次我们酷客多智慧连锁究竟都有哪些功能呢?能为连锁品牌企业运营带来哪些助力,又该如何运用好我们的智慧连锁 ...

  5. 8天后,有份独家小程序数据分析报告重磅来袭

    写下这个标题的时候,小编的内心是有点小激动的. 目前夏日葵电商成功涉及的小程序有:旅游.餐饮.技术服务.生鲜电商以及耗材等行业: 为了让更多想做小程序的人掌握先机, 夏日葵电商将与这5类小程序商家联手 ...

  6. uniapp 统计_“uni统计”震撼来袭 - 1份报表,掌握全景数据(App及各种小程序)

    `uni-app` 发布以后,广受开发者欢迎.可是开发者发布了多端应用后,却为统计数据发愁了. 到处接SDK,每天登录不同的报表,想知道今日全平台一共新增了多少用户,还得自己手工加...... &qu ...

  7. 小程序卖货新流量,微信公众号“返佣”来袭

    微趋道消息,微信已经开始邀请一批公众号参与返佣商品(CPS)广告插件功能测试.公众号运营者在图文中插入电影类目的商品,根据商品的实际成交金额及返佣比例,可获得相应的广告分成. 公众号返佣商品内测邀请通 ...

  8. 追格小程序重磅升级 新亮点来袭!

    追格小程序是一个积木式小程序搭建框架,基于Uniapp+WordPress开发,代码免费开源不加密且支持二开,安装追格相应扩展模块,简单配置即可快速搭建不限于圈子社区.知识付费.活动报名.资讯等类型小 ...

  9. 独家:小程序再添新能力,QQ空间5.62亿月活用户福利来袭

    QQ空间广告支持跳转小程序 小程序广告能力再升级,这次的触角伸向QQ空间广告! 以前广告主只能在微信内投放小程序广告,现在广告主如果投放QQ广告,可以引导用户点击广告后的落地页设置为公众号文章,并且, ...

最新文章

  1. Struts从2.1升级到2.3版本过程
  2. “因人脸识别错误,我被捕了!”
  3. 使用Edge.js,在JavaScript中调用C# .Net
  4. 在lips追加拣配数量
  5. Linux文件操作实用笔记
  6. C,C++宏中#与##的讲解
  7. 射击比赛(java)
  8. PowerDesigner执行sql脚本方式建立数据模型
  9. MacOS13系统升级动态壁纸无法安装解决方法
  10. 华为数通NA-NP学习笔记(个人精简)
  11. 高中计算机教室标语,高中教室宣传标语
  12. Spring Cloud Netflix之Euraka Server注册中心
  13. qq传离线文件提示服务器超时,QQ传文件时进度条显示不正常的解决办法
  14. 浅谈Redis数据类型
  15. 金山办公和金山软件是同一家公司?复盘金山办公成长史 | 云计算
  16. 费诺编码的MATLAB递归实现
  17. ccurately Say CocaCola!
  18. OPPO 2020届全球校园招聘启动
  19. 印象笔记文章转到kindle上文字显示小的解决办法
  20. 太空乱游等待服务器响应,《太空乱游》游戏特色内容一览

热门文章

  1. 【实验技术笔记】细胞表型检测之细胞粘附(细胞粘附实验) + 细胞侵袭(transwell实验)
  2. VS2015对WDK10驱动程序进行双机调试
  3. 添加删除按钮html代码怎么写,JavaScript添加一个文本框并带有删除按钮
  4. AspNetPager使用指南
  5. golang 不翻墙安装golang.org/x/net
  6. 您最喜欢的“非主流”编程语言是什么?
  7. win7 自建wifi热点供安卓手机/ipad 使用
  8. 使用Jest测试js代码
  9. 腾讯云COS存储SDK配置
  10. 浅谈游戏程序设计入门