小程序的文檔分爲 簡易教程、框架、組件、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 //處理相關受權成功數據處理 } }
外部連接跳轉
添加外鏈連接須要到業務域名配置(業務域名目前僅支持本身已備案成功的域名)
關於審覈
小程序審覈不是一路順風,主要仍是服務類目選擇的問題,像博客這種應該選擇教育
>教育信息服務
這類;視頻類還需上傳相關許可證。