小程序的文档分为 简易教程、框架、组件、API 、工具
https://developers.weixin.qq....前端
微信开发者工具不足,主要在几方面:
前期工做准备:
一、申请开发者帐号,完善信息,开发者资质认证
二、配置接口服务器域名及业务域名
三、不是使用本地接口时代理配置需使用系统代理,以防真机出现接口访问不到
四、记得勾选不校验合法域名,接口访问问题
五、上传时,项目的基本信息APPID须要是管理者APPID,代码才能够上传,上传成功便可在微信公众平台-管理-版本管理-开发版本看到提交信息,可在成员管理添加体验者;canvas
项目结构
经常使用组件
* 视图容器 view scroll-view swiper * 基础内容 text * 媒体 image video audio * 表单 button input checkbox label picker * 画布 canvas * 地图 map
经常使用语法
数据绑定小程序
<view> {{ message }} </view> Page({ data: { message: 'Hello MINA!' } })
列表渲染
segmentfault
<view class="unit" wx:for="{{courseList}}" wx:key="{{item.id}}" id="{{item.id}}"> <image class="thumb-img" mode="aspectFill" lazy-load="true" src="{{item.titleImg}}" /> <text class="title">{{item.title}}</text> </view>
列表中的wx:key 是一个比较使人迷惑的地方 ,不写会报错,可是随便给一个字符也不合理,最好是循环中的一个标记惟一性的键值,好比id缓存
条件渲染服务器
<view wx:if="{{length > 5}}"> 1 </view> <view wx:elif="{{length > 2}}"> 2 </view> <view wx:else> 3 </view>
事件绑定微信
<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view> Page({ tapName: function(event) { console.log(event) } })
小程序的事件绑定,写法上有些区别,主要2种 bind:youevent="eventhandle" catch:youevent="eventhandle" catch 能阻止事件冒泡微信开发
模块开发app
小程序可使用common.js 的模块开发方式。moudle.exports /exports 导出模块, require (‘file.js’) 的方式引入模块微信公众平台
页面的生命周期
App({ onLaunch: function(options) {},//当小程序初始化完成时,会触发 onLaunch(全局只触发一次) onLoad: function(options) {},//监听页面加载(能够在这里异步的请求数据,初始化页面) onShow: function(options) {},//监听页面显示 onHide: function() {},//监听页面隐藏 onReady: function(options) {},//监听页面初次渲染完成 onUnload: function() {},//监听页面卸载 onError: function(msg) {},//监听页面报错 globalData: 'I am global data' })
request异步,app.js的onLaunch和page的onLoad?
onLaunch和onLoad是异步的,各执行各的,里面的代码,谁先谁后,彻底不可知。onLaunch是只有冷启动时候才会被再执行的 其它时候是不会被执行的 ;
业务场景:
在onLaunch通常用来获取用户信息的 而在page.js的onLoad也要拿着这个信息去后台获取数据,这个时候就获取不到了~
onLaunch 调用 wx.redirectTo 没有效果是由于这个时候页面还没注册(页面跳转尽可能不放在onLaunch)
解决方案:
一、添加启动页
二、在页面onLoad里判断app.js里拿到openid了吗,没拿到的话,传个回调方法给app.js,让他拿到以后执行这个回调方法
三、onLaunch用来获取用户信息,相关数据获取放到页面上
request异步,onload 和onshow?
业务场景:
每一个页面都有获取用户的登陆信息而调用接口进行操做,获取用户登陆信息这步可能涉及到调用接口,写在onload上,可能会致使onshow调用接口的方法还没来得及获取到用户信息就执行了,若是我把逻辑都写在onload上,后退到页面还要有部分数据要刷新状态。
方案:一、写在onShow中,登录后缓存登录状态,下次执行onShow时,判断一下登录状态(在缓存里面增长一个状态判断,若是以前执行过就再也不重复执行,没执行再进行执行)
二、首次加载的写onLoad,须要即时刷新的在onShow里面加this.onLoad()
小程序如何获取用户openid和unionId
注:没有在微信开放平台作开发者资质认证的就不要浪费时间了,没认证没法获取unionId,认证费用300元/年,emmmm....
流程
第一步:wx.login获取 用户临时登陆凭证code
第三步:把步骤一code、appid传到开发者本身服务端
第三步:服务端结合code、appid、secret进行解密获取openid、unionId
wx.login({ success: res => { if (res.code) { // 发送 res.code 到后台换取 openId, unionId WXAPI.jsCodeLogin({ 'appId': 'wxf346fd2ae233a0fc',(开发者APPID) 'code': res.code }).then(function(res) { //res.data.openId, //res.data.unionId, }) } } })
详细:http://www.javashuo.com/article/p-mvavulpr-gh.html
登陆受权
新的受权需用button组件调用getUserInfo,因此在这以前没法调用wx.login,可是若是先调用获取用户信息再调用wx.login的话,解密过程会出错。
解决办法:
在页面的onLoad生命周期里调用wx.login,获取的code存入data以备须要的时候使用,可是code失效时间为5分钟,若是用户停留页面时间过长后点击受权登陆,此时的code已通过期了,因此,获取code的函数应该每4分钟左右调用一次
wxml按钮受权:
<button open-type='getUserInfo' bindgetuserinfo="getUserInfo">受权登陆</button>
onLoad: function (options) { this.getCodeTimer() }, getCodeTimer () { wx.login({ success: res => { WXAPI.jsCodeLogin({ 'appId': 'wxf346fd2ae233a0fc',(开发者APPID) 'code': res.code }).then(function(res) { //res.data.openId, //res.data.unionId, }) setTimeout(() => { this.getCodeTimer() }, 4 * 60 * 1000) } }) // 受权登陆 getUserInfo: function(e) { if (e.detail.errMsg === 'getUserInfo:fail auth deny') { //拒绝 console.log('用户拒绝受权') } else if (e.detail.errMsg === 'getUserInfo:ok') { //容许 //e.detail.userInfo //处理相关受权成功数据处理 } }
外部连接跳转
添加外链连接须要到业务域名配置(业务域名目前仅支持本身已备案成功的域名)
关于审核
小程序审核不是一路顺风,主要仍是服务类目选择的问题,像博客这种应该选择教育
>教育信息服务
这类;视频类还需上传相关许可证。