1. 生命週期和相關函數php
Page({ data: {}, // Page 實例的生命週期函數 onLoad: (option) => { // 頁面初次加載時候觸發,只會觸發一次 console.log(option.id) // 1 }, onReady: () => {}, // 頁面初次渲染完畢,只會觸發一次(頁面已經準備穩當,在邏輯層能夠和視圖層進行交互了) onShow: () => {}, // 從別的頁面進入到當前頁面時調用 onHide: () => {}, // wx.navigateTo 切換到其餘頁面或者底部tab切換時觸發 onUnload: () => {}, // 使用 wx.redirectTo 或者 wx.navigateBack 返回其餘頁面時候觸發,當前頁面會被銷燬 // 頁面用戶行爲 onPullDownRefresh: () => {}, // 須要在app.json的window選項中或頁面配置中開啓enablePullDownRefresh onReachBottom: () => {}, // 能夠在app.json的window選項中或頁面配置中設置觸發距離onReachBottomDistance onShareAppMessage: () => { // 此事件須要 return 一個 Object,用於自定義轉發內容 return { title: 'xxx', path: '/yyy', } }, onPageScroll: (obj) => { console.log(obj.scrollTop) // 頁面在垂直方向已滾動的距離(單位px) }, // 其餘自定義函數 getData: () => { this.formatDate() // 用 this.func 來訪問實例中的函數 }, formatDate: () => {}, })
2. this.setDatevue
this.setDate({ key: value }, callback) key 的值很是靈活,能夠以數據路徑的形式給出(字符串形式),示例: data: { myInfo: { name: 'wangxi', age: '26' }, user: [{ nickName: 'Tony' gender: 'male' }] } this.setData({ 'userInfo.name': 'Raychan' 'user[0].gender': 'female' })
setDate會更新 this.data 中對應的值(同步的過程)
而且把數據從邏輯層傳遞給渲染層,從而達到更新頁面的目的(異步的過程)
回調函數在setDate 對界面渲染完成後觸發ajax
不要直接修改 this.data (注意和 vue 中修改數據的方式加以區別)json
綜上,下面的代碼是能夠獲取到到對應的data值的(和 React 中的 setState 不一樣)小程序
data: { name: 'wangxi' } this.setData({ name: 'Raychan' }) console.log(this.data.name) // Raychan
3. 路由緩存
getCurrentPages() // 獲取當前頁面棧的實例
4. 模塊化服務器
// 公共代碼導出 module.export.funcName = funcName // 引用 var name = require('funcName')
5. 模板微信
// define <template name='tpl'></template> // usage <template is='tpl'></template>
6. 運行機制
小程序沒有重啓的概念
當小程序進入後臺,客戶端會維持一段時間的運行狀態,超過必定時間後(目前是5分鐘)會被微信主動銷燬
當短期內(5s)連續收到兩次以上收到系統內存告警,會進行小程序的銷燬網絡
7. 請求APIapp
wx.request({ url: 'test.php', data: {}, header: { 'content-type': 'application/json' }, success: function(res) { // 收到https服務成功後返回 console.log(res.data) }, fail: function() { // 發生網絡錯誤等狀況觸發 }, complete: function() { // 成功或者失敗後觸發 } })
8. 獲取系統信息
wx.getSystemInfoSync()
9. 頁面交互反饋
// view 容器和 button 組件提供了 hover-class 屬性,觸摸時會在該組件上加上對一個的樣式 <view hover-class="clsName"></view> // 在耗時操做時加上 loading 屬性 <button loading="{{loading}}" bindtap="tap"></button> data: { loading: false } tap: () => { this.setData({ loading: true }) // ajax etc... }
10. 顯示隱藏 toast
wx.showToast({ title: 'xxx', icon: 'success', duration: 1500, // 1.5 秒後消失 }) wx.hideToast()
11. modal
wx.showModal({ title: '標題', content: '告知當前狀態,信息和解決方法', confirmText: '主操做', cancelText: '次要操做', success: function(res) { if (res.confirm) { console.log('用戶點擊主操做') } else if (res.cancel) { console.log('用戶點擊次要操做') } } })
12. HTTP 請求
var hasClick = false; Page({ tap: function() { if (hasClick) { return } hasClick = true wx.showLoading() wx.request({ url: 'https://test.com/getinfo', method: 'POST', header: { 'content-type':'application/json' }, data: { }, success: function (res) { if (res.statusCode === 200) { console.log(res.data)// 服務器回包內容 } }, fail: function (res) { wx.showToast({ title: '系統錯誤' }) }, complete: function (res) { wx.hideLoading() hasClick = false } }) } })
13. 排查異常的方法
在使用wx.request接口咱們會常常遇到沒法發起請求或者服務器沒法收到請求的狀況,咱們羅列排查這個問題的通常方法:
14. 緩存
wx.getStorage({ key: 'key1', success: res => { console.log(res) }, fail: (err) => { console.log(err) } }) try { const value = wx.getStorageSync('key2') } catch (e) { console.log(e) } // 寫緩存 wx.setStorage({ key: 'key1', data: 'value1' success: res => { console.log(res) }, fail: (err) => { console.log(err) } })
利用本地緩存提早渲染界面
Page({ onLoad: function() { var that = this var list =wx.getStorageSync("list") if (list) { // 本地若是有緩存列表,提早渲染 that.setData({ list }) } wx.request({ url: 'https://test.com/getproductlist', success: function (res) { if (res.statusCode === 200) { list = res.data.list that.setData({ list }) // 再次渲染列表 wx.setStorageSync("list", list) // 覆蓋緩存數據 } } }) } })