基礎的配置及視圖層、邏輯層本身看文檔 [微信小程序文檔][1] 這裏只說一下本身的經驗總結
微信小程序不運行在瀏覽器,因此不能操做Dom,也沒有document、window對象css
每個頁面路徑最多五層json
eg:頁面A->頁面B->頁面C->頁面D->頁面E->(頁面F是跳轉不出來的) 注:不通過redirect,redirect後的頁面算是第一層,可是沒有-返回-按鈕
沒有外鏈,只能用app.json裏配置的路由,a標籤編譯時會自動過濾掉小程序
wx:for循環渲染時,要添加wx:key,不然報警告後端
使用<scroll-view>作x軸滾動時,要設置height屬性,不然開發工具買帳,手機可不慣着你微信小程序
給視圖綁定數據時,只有事件綁定、wx:key、wx:for-index、wx:for-item,直接綁定,不須要{{}},其它綁定都要在{{}}裏綁定瀏覽器
app.json裏的pages,最好是按照,層級順序進行配置,要否則可能不會跳轉微信
使用touchstart、touchend時,最好不要阻止冒泡,會影響子級的tap事件,touchmove最好阻止冒泡,防止影響父級scroll-viewapp
使用input時,最好在bindinput中動態設置value,不然安卓真機會出問題dom
設計時最好讓ui作成750px,開發中,ui是多少px,你寫成多少rpx就OK了,原理,本身查文檔去
<navigator url="/pages/detail/detail?id=2"></navigator> Page({ onLoad (opositions) { // 看看是否是你想要的 console.log(opositions.id) } })
每一個頁面都有一個Page實例,響應就是該實例的setData方法觸發的, *直接給綁定數據賦值,數據會改變,可是視圖不會渲染 js文件 let config = { data: {} } Page(config)
wxml文件 <view bindtap="tapHandler"></view> js文件 let config = { data: {}, tapHandler () { console.log('i am a handler') } }
bindtap的綁定最終會解析成方法名,因此bindtap=「tapHandler(參數)」,是會報錯的,----沒有找到‘tapHandler(參數)’這個方法,
好在,執行事件綁定函數時,會給它傳遞一個參數,參數裏能取到,id、data-set,能夠用他們倆綁定屬性,不要企圖找name、class等屬性,沒用的,沒有函數
組件分三個文件,wxml、js、css
wxml文件定義template模版,頁面裏以import方式引入,這樣能控制傳入模版的數據
js文件exports一個對象,頁面裏以require方式引入,而且合併到Page實例化的配置對象中 let tempateConfig = require('url') let mergeConfig = require('url/wxTools.js')['mergeConfig'] let config = { data: {} } config = mergeConfig(config, templateConfig) Page(config)
mergeConfig是本身定義的簡單的對象合併函數,支持多層,多對象合併
Object.assign()方法在安卓真機上運行報錯,不能用
wxTools.js function merge (con, mcon) { for (var key in mcon) { if (typeof mcon[key] == 'object' && con[key]) { merge(con[key], mcon[key]) } else { con[key] = mcon[key] } } return con } function mergeConfig () { let config = {} for (var i = 0, len = arguments.length; i < len; i++) { config = merge(config, arguments[i]) } return config } module.exports = { mergeConfig: mergeConfig }
css文件以@import方式導入
1.錨點
<navigator>的url只能是app.json裏配置的路由,只支持查詢字符串,不支持hash,因此不能經過連接作錨點了。
還好微信提供了<scroll-view>,實現以下:
wxml文件 <view> <button data-hash="hash1" bindtap="goHash">點擊定向hash1</button> <button data-hash="hash2" bindtap="goHash">點擊定向hash2</button> </view> <scroll-view scroll-y="true" scroll-into-view="{{toView}}"> <view id="hash1"></view> <view id="hash2"></view> </scroll-view> js文件 Page({ data: { toView: 'hash1' }, goHash (e) { let hash = e.currentTarget.dataset.hash this.setData({ toView: hash }) } })
可是這是單向的,只能點擊按鈕,跳轉錨點,屏幕滑動到相應錨點,toView屬性不會相應改變,固然,若是你能經過bindscroll事件動態取到的相關數據,而且最終能把toView計算出來,就另說了,但不要想操做dom獲取元素寬高什麼的,對不起,微信的dom賣完了,沒有
2.滾動加載
微信沒有document、window對象,因此沒有onscroll給你用,那怎麼辦呢?
還好微信提供了<scroll-view>,實現以下:
wxml文件 <scroll-view scroll-y="true" scroll-into-view="{{toView}}" bindscrolltolower=「loadMovies」> <view wx:for="{{movies}}" wx:key="index"> {{item.name}} </view> </scroll-view> js文件 Page({ data: { movies: [] }, getMovies () { let _self = this wx.request({ url: 'https://......', data: {}, success: function(res) { // res.data纔是你後端返回的真實數據 _self.setData({ movies: res.data }) } }) }, loadMovies () { // 獲得要更新的數據,setData重置movies } })
能夠作懶加載,也能夠作預加載,具體邏輯本身想吧
暫時就這些啦。。。最後抱怨一句,咋就不支持外鏈呢,引共用組件咋那麼麻煩呢