发表日期:2017-12 文章编辑:小灯 浏览次数:1487
原标题【10天搞完电商微信小程序de采坑日记】感觉已经不太合适了,所以改一下~~
12月4日boss通知,要求尽快把现有m站功能克隆一份到微信小程序,5日开始开发 - 9日基本完成,10日开始提测+改BUG,12月13日-发布到微信后台审核,12月14日开始写总结等发布,记录一下开发小程序的坑
微信搜: 新氧
微信号: soyoung111
就能看到最新版的小程序,本文会不定期更新,最新的都在最上面~
因为工作方向转移到其他方向,本章不再持续更新啦~
如果有很必要的东西再更新~
传送门 小程序自动打码
先看数据小程序分享集卡活动,不同群获得不同得卡片,集满有现金奖励,包含的技术点:
// 开启shareTickets来获取群信息, // 再通过openid/session_key还有iv去解密 encryptedData,是否对应/重复wx.showShareMenu({ withShareTicket: true })
模拟器上的测试群,通过withShareTicket开启
从凌晨2点搞到4点的跑马灯兼容性css里面的animation/keyframes/transform都用啦,做翻牌子,弹出效果 打包的时候有autoprefix,兼容性不用担心~
微信小程序弹出层禁止底层滚动最后是个截图~ 2月8日晚上提审,9日上午就过了 ~
春节前得最后一大波
集齐卡真的可以提现666RMB噢~npm install wepy-cli@1.6.1-alpha4 否则会报 'xxxx 出现脚本错误或者未正确调用 Page()'
分包的.wpy在 packageItem 里面 分包成功后的小程序,在第一次点击分包加载的页面时,会出现一个loading,加载过不触发冷启动,就不会有这个loading啦
截图截不到,就拍照了跳转限制限制增加到9层,之前介绍过,团队统一使用跳转方法,修改页面堆栈判断length,就可以了
修改页面堆栈小程序里获取 DOM 动态设置高度
背景: 在组件里面有个swiper,需要动态设置高度,只要先动态获取高度再赋值给swiper,并且页面多个组件不冲突
官方获取DOM文档,点击查看
关于随机数会重复...一个页面最多4个组件,100个随机数,问概率
小程序里获取 DOM 动态设置高度4.在这版本中,我们尝试把原来h5/hybrid-app的页面拿过来直接做渲染,只要把less里面的rem单位换一下,基本就可以使用了。但是在class选择器解析优先级的时候,我们发现微信小程序的规则和浏览器规则/flex在ios8上/ 默认的display:block/ 默认的*{box-sizing:border-box} 等等会有不太一致的地方,所以进行了微调整
最后等新版本审核更新~
二维码wepy
wepy文档
是一款让小程序支持组件化开发的框架,通过预编译的手段让开发者可以选择自己喜欢的开发风格去开发小程序。
微信小程序·API
框架提供丰富的微信原生API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等。
wx. 开头,在wepy中可用 wepy. 替换
微信开发者工具
成为开发者后,可以扫码开发预览调试
6个前端小伙,基本都是0基础,现看文档现写
首页+商品列表+商品详情+确认订单+订单支付+支付结果+个人中心+订单列表+订单详情+退款+优惠券-红包+活动-专题-专场+出发城市列表等等页面
+-- /dist 生成后文件 ,对应 微信开发者工具里面的指向目录 | +-- /src 开发目录 || |+-- /components 组件 || |+-- /images 图片 |+-- /mixins less-mixins + 开源js资源 |+-- /pages 开发目录 ||| ||+-- index.wpy 业务页面 ||+-- product.wpy 业务页面 ||+-- pay.wpy 业务页面 | |+-- app.wpy 公共数据/配置/方法等等 | |-- package.json|-- wepy.config.js // 参考webpack.config.js
wepy和 微信开发工具 需要配置编辑器 - 配置 - (vs code)
格式化 *.wpy 文件wpy-beautify 格式化 *.wpy 文件
image.png vscode-wxml 语法支持及代码片段
vetur高亮提示vetur .wpy文件 高亮提示
修改文件格式-以使用上述插件import wepy from 'wepy' export default class Index extends wepy.page{customData = {}// 自定义数据customFunction () {}//自定义方法onLoad () {}// 在Page和Component共用的生命周期函数onShow () {}// 只在Page中存在的页面生命周期函数onUnload (){} // 在页面navigateTo等等行为时触发config = {};// 只在Page实例中存在的配置数据,对应于原生的page.json文件data = {};// 页面所需数据均需在这里声明,可用于模板数据绑定components = {};// 声明页面中所引用的组件,或声明组件中所引用的子组件mixins = [];// 声明页面所引用的Mixin实例computed = {};// 声明计算属性watch = {};// 声明数据watchermethods = {};// 声明页面wxml中标签的事件处理函数。注意,此处只用于声明页面wxml中标签的bind、catch事件,自定义方法需以自定义方法的方式声明events = {};// 声明组件之间的事件处理函数} 2017年11月12日的时候微信加了web-view组件
需要配置 白名单
h5升级 jssdk 1.3.0可以使用 navigateTo等跳转方法
并且可以url传参
描述: navigateTo 超过5次页面不跳转,看log是因为跳转层级过深
原因:为了不让用户在使用小程序时造成困扰,我们规定页面路径只能是五层,请尽量避免多层级的交互方式。
解决方案:
1 - 在app.wpy里面 封装公共方法,不再使用wepy.navigateTo或者redirectTo
2 -每个页面在onload 和onUnload 时 把 this.getCurrentPages存到 setStorageSync 里面
3 - 页面 调用跳转方法时,getStorageSync 取出刚才存的getCurrentPages,判断是使用navigateTo还是redirectTo,目前是大于4的时候用redirectTo 所以规则就是 1,2,3,4,5,5,5...
小程序层级问题1 - 在app.wpy里面 封装公共方法
isIphoneX(...params) { try { const that = this if (that.globalData.isIphoneX == 1) { return 1 } else if (that.globalData.isIphoneX == 0) { return 0 } let res = wx.getSystemInfoSync() // console.log(res.model) // console.log(res.pixelRatio) // console.log(res.screenWidth) // console.log(res.screenHeight) if (res.pixelRatio == 3 && res.screenWidth == 375 && res.screenHeight == 812) { that.globalData.isIphoneX = 1 return 1 } that.globalData.isIphoneX = 0 return 0 } catch (error) { console.log(error.message) } } 2- 公共样式
.iphone-x{ // .px2rpx(padding-top,44); .bottom-fixed{ .px2rpx(bottom,34); } box-sizing: border-box; position: relative; // &:before{ // content:' '; // position:fixed; // top:0; // left: 0; // width:100%; // .px2rpx(height,44); // background: #fff; // z-index: 999; // } &:after{ content:' '; position:fixed; bottom:0; left: 0; width:100%; .px2rpx(height,34); background: #fff; z-index: 999; } } 3 - 在 业务页面 onLoad时 调用,并追加样式,再根据 .iphone-x 进行适配书写样式
onLoad(options){this.isIphoneX = this.$parent.isIphoneX() } <view class="container" :class="{iphone-x:isIphoneX ==1}"></view> 如果用了wepy,这里还是需要换成 wx.request而非 wepy.request
const requestTask = wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: {x: '' ,y: '' }, header: { 'content-type': 'application/json' }, success: function(res) { console.log(res.data) } })requestTask.abort() // 取消请求任务 WePY 使用less autoprefix
wepy框架autoprefixer插件
position:sticky - ios支持,安卓部分机器 呵呵哒,
如果用onPagesScroll去写,性能不佳...
滚动的业务场景更适合用<scroll-view>实现,而不是自己写样式实现。
image组件默认宽度300px、高度225px,没有height和width属性,只能通过样式干预。
iconfont生成后,base64引用就能使用了
跟年初 ATS 要求一样,能https就https,免去很多莫名其妙的问题
https小程序是可以使用 div p span 等Html标签的,只是在容错兼容上不如chrome,最好小程序标签配合使用,标签闭合写完整就行,有原生组件用原生组件
异步调用刷新视图,需要scope上的所有数据, wepy 是当前页面或者组件数据 ,效率好很多
调用app实例需要 root
数据统计这里,有微信自己的数据统计和自定义事件来收集,
我们也引入了阿拉丁帮忙来进行数据收集
小程序在初始化的时候,会把所有js文件都加载进来(即使是没展示的页面)目前wepy自带的压缩很贴心,基本不用改啥配置就能减少体积很多
两份文档 wepy + 微信小程序api 一起看,少了那个都不行
不能关闭eslint,能避免很多低级出错
想简单的把h5改改就嵌套进来的体验肯定不如原生的好,目前是1-2个页面和专题页面用web-view
看看rescuetime就知道这一周有多忙啦
rescuetime团队的乡亲们都很棒,第4-5天基本都完成的时候兴奋得不得了~ 提交审核那一刻也开心的不得了~
细节真的很重要!细节真的很重要!细节真的很重要!