本文同步發佈到 http://www.kt5.cn/fe/2019/11/04/mini-programme/javascript
background-image支持網絡的圖片連接或者base64php
UI設計模版要按750寬出圖css
樣式,屬性或者內容都支持{{雙大括號輸出html
swiper, scroll-view,picker,switch,slider,open-data等等組件。wx.request,wx.setStorage,wx.getSystemInfo,wx.onNetworkStatusChange,wx.makePhoneCall,wx.setClipboardData,wx.getClipboardData,wx.chooseImage,wx.saveFile,wx.downloadFile,wx.openDocument,wx.getFileInfo等等APIvue
tap,touchstart,touchmove,touchcancel,touchend,longpress,longtap等等java
globalData = { userInfo: null, fetch: fetch, // 把fetch綁到全局使用 API: API, // 把API綁到全局使用 Base64: new Base64(), // 把Base64綁到全局使用 isLoading: true }
異步調用如setTimeout或者request請求後ios
這跟mina框架使用方式不同,與vue也不同git
如可用開發工具的1.9.9調試庫來測試,可能會出現以下問題:es6
一、不顯示頭像問題github
<open-data type="userAvatarUrl" ></open-data>
可用設置背景爲默認頭像解決
二、連續屢次點擊觸發屢次navigateTo或者toast事件,解決方式是綁定變量立flag防止屢次觸發
與vue的$nextTick相似,視圖更新後觸發回調
可用onShow, onHide, onLoad, onUnload等處理,或者根據場景值有 1001, 1019, 1022, 1023, 1038, 1056進行相應的處理
其運行機制可參考:https://developers.weixin.qq.com/miniprogram/dev/framework/operating-mechanism.html
onShareAppMessage: (res) => { if (res.from === 'button') { console.log("來自頁面內轉發按鈕"); console.log(res.target); } else { console.log("來自右上角轉發菜單") } return { title: '標題', path: '/pages/index', imageUrl: "/images/1.jpg" } }
一般開發者但願轉發出去的小程序被二次打開的時候可以獲取到一些信息,例如羣的標識。如今經過調用 wx.showShareMenu 而且設置 withShareTicket 爲 true ,當用戶將小程序轉發到任一羣聊以後,此轉發卡片在羣聊中被其餘用戶打開時,能夠在 App.onLaunch() 或 App.onShow 獲取到一個 shareTicket。經過調用 wx.getShareInfo() 接口傳入此 shareTicket 能夠獲取到轉發信息。
可以使用通用的CSS3 keyframe動畫
constructor() { // 一、經過接口攔截瞭解網絡狀況 super() this.use('requestfix') // this.use('promisify') // 攔截request請求 this.intercept('request', { // 發出請求時的回調函數 config (p) { // 對全部request請求中的OBJECT參數對象統一附加時間戳屬性 // p.timestamp = +new Date(); // console.log('config request: ', p) // 必須返回OBJECT參數對象,不然沒法發送請求到服務端 return p }, // 請求成功後的回調函數 success (p) { // 能夠在這裏對收到的響應數據對象進行加工處理 // console.log('request success: ', p) // 必須返回響應數據對象,不然後續沒法對響應數據進行處理 return p }, //請求失敗後的回調函數 fail (p) { // console.log('request fail: ', p) // 必須返回響應數據對象,不然後續沒法對響應數據進行處理 return p }, // 請求完成時的回調函數(請求成功或失敗都會被執行) complete (p) { // console.log('request complete: ', p) } }); }
wx.getNetworkType({ // 二、經過網絡類型 success: function(res) { // 返回網絡類型, 有效值: // wifi/2g/3g/4g/unknown(Android下不常見的網絡類型)/none(無網絡) var networkType = res.networkType } })
wx.onNetworkStatusChange(function(res) { // 三、監聽網絡變化 console.log(res.isConnected) console.log(res.networkType) })
得到opened的方式詳見:https://developers.weixin.qq.com/miniprogram/dev/api/api-login.html#wxloginobject
一、project.config.json
{ "description": "project description", "setting": { "urlCheck": true, "es6": false, "postcss": false, "minified": false }, "compileType": "miniprogram", "appid": "touristappid", "projectname": "Project name", "miniprogramRoot": "./dist" }
es6: 對應關閉ES6轉ES5選項,關閉。 重要:未關閉會運行報錯。
postcss: 對應關閉上傳代碼時樣式自動補全選項,關閉。 重要:某些狀況下漏掉此項也會運行報錯。但上傳代碼時要打開,否則會有機型不適配問題
minified: 對應關閉代碼壓縮上傳選項,關閉。重要:開啓後,會致使真機computed, props.sync 等等屬性失效。(注:壓縮功能可以使用WePY提供的build指令代替,詳見後文相關介紹以及Demo項目根目錄中的wepy.config.js和package.json文件。)
urlCheck: 對應不檢查安全域名選項,開啓。 若是已配置好安全域名則建議關閉。
二、可靈活切換 調試基礎庫 進行兼容性測試
相似window.history的機制
注意:調用 navigateTo 跳轉時,調用該方法的頁面會被加入堆棧,而 redirectTo 方法則不會。目前頁面路徑最多隻能十層。
globalData = { // wepy開發中在app.wpy文件中全局定義好分享內容 shareInfo: { title: '個人標題', path: '/pages/index', imageUrl: '../images/share.jpg' // 圖片比例5:4,如500*400,儘可能控制圖片的大小,否則會被微信強制壓縮影響圖片質量 } }
// 分享方案設置 onShareAppMessage (res) { const shareInfo = this.$parent.globalData.shareInfo // 全局設置分享內容 return { title: shareInfo.title, path: shareInfo.path, imageUrl: shareInfo.imageUrl // 圖片比例5:4,如500*400,儘可能控制圖片的大小,否則會被微信強制壓縮影響圖片質量 } }
方案1、彈出層時給根元素添加 height: 100%; overflow: hidden; 樣式
方案2、弱解決,不打包票的方案:catchtouchmove="preventTouchMove",給彈層添加阻止touchmove冒泡,若是是wepy下則寫成@touchmove.stop="preventTouchMove",preventTouchMove是自定義的空函數
wx.onNetworkStatusChange(function(res) { console.log(res.isConnected) // 網絡連後如何處理,需不須要從新登陸wx.login console.log(res.networkType) // 輸出網絡類型 wifi/2g/3g/4g/unknown(Android下不常見的網絡類型)/none(無網絡) }) wx.getNetworkType({ success: function(res) { // 返回網絡類型, 有效值: // wifi/2g/3g/4g/unknown(Android下不常見的網絡類型)/none(無網絡) var networkType = res.networkType } })
一、使用wx:if
二、設置hidden="true"
三、設置樣式opacity
四、若是是文字,能夠設置font-size爲0再恢復
通常審覈時間的長短是與小程序的類別有關的,如社交類的需進行互聯網主管部門的二次審覈,須要一到兩週的時間才能完成審覈。其餘工具類的可能2~3天就能夠一次審覈經過。
https://github.com/Tencent/wepy/wiki/WePY-%E4%BD%BF%E7%94%A8less-autoprefix
給圖片連接加隨時時間戳參數,或者更換圖片名字
`${url}?t=${String(new Date().valueOf())}`
可經過wx.getSystemInfo(Object object)得到高度後計算出高度動態設置
brand string 手機品牌 >= 1.5.0 model string 手機型號 pixelRatio number 設備像素比 screenWidth number 屏幕寬度 >= 1.1.0 screenHeight number 屏幕高度 >= 1.1.0 windowWidth number 可以使用窗口寬度 windowHeight number 可以使用窗口高度 statusBarHeight number 狀態欄的高度 >= 1.9.0 language string 微信設置的語言 version string 微信版本號 system string 操做系統版本 platform string 客戶端平臺 fontSizeSetting number 用戶字體大小設置。以「我-設置-通用-字體大小」中的設置爲準,單位 px。 >= 1.5.0 SDKVersion string 客戶端基礎庫版本 >= 1.1.0 benchmarkLevel number (僅Android小遊戲) 性能等級,-2 或 0:該設備沒法運行小遊戲,-1:性能未知,>=1 設備性能值,該值越高,設備性能越好 (目前設備最高不到50) >= 1.8.0
調用wx.login(Object object)獲取的登陸憑證(code)(有效期五分鐘)。開發者須要在開發者服務器後臺調用 code2Session,使用 code 換取 openid 和 session_key 等信息,與用戶的openid匹配則爲真人行爲,不相等或者接口調用失敗則爲非法請求
若是特殊狀況如同時點擊提交按鈕,則可經過setTimeout來處理,由於onblur取到的值會有必定的延時。
當須要作一個相似dialog的組件時,要控制組件顯示與隱藏,要給組件定義好一個show與hide方式便可,而後在調用組件的頁面調用該組件便可對組件進行顯示與隱藏的控制。代碼以下:
定義組件:
<style lang="less"> </style> <template> <view class="my-dlg" wx:if="{{show}}"> </view> </template> <script> import wepy from 'wepy' export default class MyDlg extends wepy.component { props = { } data = { show: false } events = { } methods = { showDlg () { this.show = true }, closeDlg () { this.show = false } } onLoad () { } } </script>
調用組件
// 先把myDlg組件import到頁面中,定義好,而後能夠這樣控制組件 this.$invoke('myDlg', 'showDlg')
小程序中想使用圖片背景通常須要先把圖片轉成base64碼,或者使用網絡網絡路徑,不能使用本地相對路徑。
支付寶小程序作頁面切圖佈局方式還很是原始 - view + css(相似傳統的div+css),沒有像開發微信小程序那麼多框架(如wepy、mpvue等)支持。但幸虧社區出現修改版的wxss-cl工具使得咱們能夠使用less來進行樣式預處理。詳細以下:
https://openclub.alipay.com/read.php?tid=12098&fid=66&ant_source=zsearch
好比把標籤view寫錯成veiw可能會現現什麼異常呢?若是頁面節點結構複雜的話開發者工具的渲染器會卡死,若是節點簡單的話,能夠錯誤的渲染出來;這兩種狀況調試器都不會報錯,要切換到 調試小程序開發者工具 (ctr+shift+I ) 才能夠看到下面這樣的報錯。
C:\Program Files\小程序開發者工具\resources\app\out\volans\workbench\browser\code\index.js:1 [renderer.file][Wed Jan 02 2019 11:35:03 GMT+0800 (中國標準時間)][ERROR]d:\xxx\index.axmlrecognized as binary
<my-component :onOk="onMyComponentOk" />
onMyComponentOk () { console.log(this) // 輸出組件對象 console.log(this.$parent) // 輸出當前組件的上面的調用方對象 }
做者也表態了,在一開始的設計中,mixin就不支持on事件,建議使用類的繼承去實現
export MyPage extends wepy.page {} export Index extends MyPage {}
https://github.com/Tencent/wepy/issues/824
能夠直接使用wxs實現相似功能,或者直接使用頁面上自定義的函數
https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxs/
wx.showToast()與wx.hideLoading()同時調用時,wx.showToast在手機上沒效果,緣由應該是hideLoading不只會做用於loading還做用於toast.
解決方案:wx.showToast()與wx.hideLoading()不一樣時調用,使用setTimeout延時調用wx.showToast()
小程序在支持上傳圖片時比較友好,但要傳其餘文件時,並無提供相關的支持,目前可想到的方案是拉出web-view來使用h5實現上傳文件的功能,但此方案的缺陷是ios根本選擇不了文件,所以只能支持安卓端。比較雞肋。
——