关于小程序,在这里有一句话送给正准备阅读的你-世界上本没有坑,路走的多了就有了;世界上本没有路,坑填的多了就有了。嗯~~~这句话就是做为第一次作仿小程序项目的我,历经‘磨难’得出来的肺腑之言。好了,很少说,进入正题。。git
这一次分享,对象是商城类小程序-仿小米商城Lite
那商城类小程序主要的功能又是什么呢?其实也就这几个点程序员
商城类的小程序,由于其性质为网上购物平台,必然罗列大量且繁杂的商品,就造成了多种分类,层层嵌套的结构。如何即点即看?这是我开始想要仿写这个小程序遇到的第一个大问题,难道每个商品一个一个给它写一个相应的详情页面吗?
来看一下页面
首先,一个一个给它写一个相应的详情页面十分耗时耗力,简洁的代码是每个程序员追求有的品质;其次,小程序代码包大小限制了你不能过多地重复代码。github
设计一个详情页模板(如效果过图)具体的页面wxml代码就不写了,(后面会给出源码连接)咱们主要分析js内的数据传输:web
toDetail:function(e){ var index=e.currentTarget.dataset.index; // console.log(index) var detail=this.data.goodsList[index]; // console.log(detail) app.globalData.detail=detail; //console.log(app.globalData.detail) this.setData({ detail:detail }) wx.navigateTo({ url: '../../buy/buy', }) }
globalData: { userInfo:null, detail:[], tocartMsg:[] }
每次点击,获取相应的数据值,将获取的值放入app.globalData里的事先设置好的空数组内(detail),注意,这里是直接将获取的值赋给detail,这样就能够保证每一次点击的商品将信息放入detail,而detail内的数据不会保存上一次获取的商品详情信息,这样就作到了数据的实时更新,这一点很重!!由于在详情页获取detail内数据时保证了获取的时最新的数据,从而实现了即点即看的效果。小程序
onLoad: function (options) { // let id=options.currentTarget.dataset.id; this.setData({ goodds:app.globalData.detail }) // console.log(this.data.goodds)
这样就完成了数据的传递数组
效果图:微信
一样的,在详情页实时获取用户点击查看的信息以后固然就要实现购物的功能,否则整个小程序就没有任何意义。网络
tocart:function(){ this.setData({ toCartMsg:this.data.goodds }) app.globalData.tocartMsg.push(this.data.toCartMsg); wx.showToast({ title: '已加入购物车', icon: 'success', duration: 2000 }) }
一样的,咱们在 app.globalData内设置一个空数组tocartMsg,这里解释一下为何要放到globalData里面,缘由就是app.js文件的做用是监听并处理小程序的生命周期函数、声明全局变量,这样咱们就能够极为方便地去引用这个小社区同志们事先无私分享的数据。app
/** * 生命周期函数--监听页面显示 */ onShow: function () { this.setData({ carMsg:[...app.globalData.tocartMsg] }) console.log(this.data.carMsg) }
最后,在每一次页面显示的时候,都将新添加购物车的商品信息获取到,由于不能只获取一次,你购买了商品发现还有一只手指没剁掉,想再来一次,那么你就会回到页面上继续购买,因此放在onShow里面是极为合适的。函数
先看效果
<view class="weui-search-bar" id="searchBar"> <view class="weui-search-bar__form"> <view class="weui-search-bar__box"> <icon class="weui-icon-search_in-box" type="search" size="14"></icon> <input type="text" bindinput="input" class="weui-search-bar__input" placeholder="搜索商品" /> </view> </view> <view class="text" bindtap="search" disbaled>搜索</view> </view> <view class="result"> <view class="" bindtap="toDetail" wx:for="{{newList}}" wx:key="{{id}}" data-index="{{index}}"> <view class="list"> <image src="{{item.image}}" /> <text class="title">{{item.title}}</text> <text class="desc">{{item.desc}}</text> <text class="price">{{item.price}}元</text> </view> </view> </view>
input:function(e){ var inputValue=e.detail.value; // console.log(inputValue) this.setData({ inputValue }) }, search:function(e){ var inputValue=this.data.inputValue; // console.log(inputValue); var goods=this.data.goodsList; // console.log(goods); // var inputValue1=this.data.inputValue; var re=new RegExp(inputValue); var temp = []; if(inputValue==''){ return false }else{ for(let i=0;i<goods.length;i++){ console.log(re.test(goods[i].title)) if(re.test(goods[i].title)){ temp.push(goods[i]); } } } // console.log(temp); this.setData({ newList:temp }) console.log(this.data.newList) }, toDetail:function(e){ var index=e.currentTarget.dataset.index; // console.log(index) var detail=this.data.newList[index]; // console.log(detail) app.globalData.detail=detail; // console.log(app.globalData.detail) wx.navigateTo({ url: '../../buy/buy', }) }
思路:获取输入框的值,将输入框的值与商品的名称进行匹配,这里用到了正则匹配,循环遍历每个信息,若是商品名称包含了所输入的值,就放到搜索结果数组,然后页面循环出来,最后调取详情模板--点击购买~~~
wx.navigateTo({ url:'XXX' })
wx.redirectTo({ url: 'test?id=1' })
<navigator url='XXX'>点击跳转</navigator>
wx.switchTab({ url: '/index' })
最后一种跳转,也是踩的坑之一,在当前应用分支下要跳转到另外一个tabBar页面应用,使用wx.navigateTo是没有办法实现跳转的,使用wx.switchTab即能跳转到另外一个 tabBar 页面,并关闭其余 tabBar下的页面。
::-webkit-scrollbar{ width: 0; height: 0; color:transparent; }
这是犯的最为严重的错误
"desc": "千元全面屏", "url": "", "price": 1799, "selected": false
getTotalPrice: function (e) { let carMsg = this.data.carMsg; let total = 0; for (let i = 0; i < carMsg.length; i++) { if (carMsg[i].selected) { total+=carMsg[i].price; } } // total=total.toFixed(1) this.setData({ totalPrice: total }); }
数据的设定时,双引号显得很是重要,boolea值加上双引号显然会报错,而数值类型加上双引号,在计算价格的时候,carMsg[i].price获得的结果时字符串类型,因此这样的细节应当注意
千里之行始于足下,绝知此事要躬行,万事开头难走到最后发现也不过如此。做为想要走上代码这条不归路的程序员,心浮气躁就是为之后整个项目给本身挖坑奠基了良好的基础。在实施以前,页面的逻辑结构必须清晰,不能抱有走一步看一步的心态,工欲善其事必先利其器,还有就是数据的设置,条理不清晰在后期工做上会遇到很是多的问题,诸如数据的提取,会十分复杂
码字不易,大佬们高抬贵手点个赞,用以鼓励本猿继续愉快踩坑。谢谢!