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