前言css
已經很久沒動過微信小程序了,週五的時候,有一個朋友說有一個外快,問我幹不幹,幾個朋友一塊兒搞一下,我想了一下,正好週末也沒啥事,女友回家了,就答應下來了,幾個朋友聚到一塊兒整了兩天整完了,由於自己程序要求就不是很高,很久也沒寫什麼技術文了,就順手也整理了一篇微信小程序經常使用的API開發技巧,想作小程序的朋友能夠看一下html
微信小程序是一種不須要下載安裝便可使用的全新的鏈接用戶與服務的方式,它能夠在微信內被便捷地獲取和傳播,同時具備「用完即走,不用關心是否安裝太多應用」的使用體驗。
微信小程序作成了一個開放式的平臺,它讓開發者能夠將本身的想法作成微信小程序的服務放在平臺上供人們使用。經過微信小程序的開發,應用將無處不在,隨時可用。在進行開發以前,須要進行註冊,綁定開發者等一系列操做。詳情移步微信官方文檔。
筆者觀看的教學視頻於2017年初拍攝,因此當時最新的開發者工具版本爲0.11.122100版,現官方文檔中提供的最新版本爲1.02.1907112版本。
是真的不須要下載安裝便可使用嗎?
不是的,微信小程序的安裝包小於1MB(最新版改成2MB),在用戶點擊使用的時候,就不到1MB的安裝包,下載安裝的時候,用戶本人是感覺不到的。前端
前端先製造假數據,能夠將假數據在頁面很好的展現以後再和服務器的數據進行相應的對接。
前端驅動服務器開發的設計理念。由此目的在於設計比較合理,api較方便。程序員
前往開發工具下載地址去下載
下載完成以後,經過微信掃一掃打開開發者工具,選擇新建項目
AppID選擇使用測試號(由於註冊小程序號比較麻煩)
其餘選項設置好以後選擇建立,進行建立新的小程序項目
平臺會自動生成一個小程序HelloWorld的demo
此工具左邊是效果區,右邊是代碼區。它有一個特色就是修改某些參數不須要編譯就能夠預覽。直接Ctrl+S就能夠看見修改的效果。
調試區用來打斷點調試代碼。點擊上方菜單欄的調試工具按鈕打開調試區。
在調試區的js文件:
帶sm後綴的是用來打斷點調試的文件,和寫的代碼是同樣的。
不帶sm後綴的是編譯事後的文件,和寫的代碼也是同樣的。只不過第一行出現了一個編譯的信息。json
一、不能上傳和發佈小程序
二、不能真機運行,只能夠在PC模擬器中運行
三、錄音、網絡狀態、羅盤、撥打電話等功能沒法使用
四、獲取用戶信息的流程是模擬的而不是真實的
可是,不影響咱們學習小程序開發小程序
在debug的斷點狀態時,快捷鍵和Crome是同樣的。後端
注:在打開調試區的狀態下點擊下圖標註的按鈕,能夠單獨將調試區打開一個窗口,並將Console摺疊放在窗口下方。微信小程序
和Crome的NetWork如出一轍api
用來查看小程序本地緩存數據數組
鼠標停留在右邊代碼上面的時候左邊頁面顯示對應的UI元素
模擬器的上面菜單欄有按鈕切換先後臺,用來模擬打開別的小程序,本程序在後臺運行的動做。當後臺運行時在小程序裏會觸發一個事件。
注:如何快速打開小程序api文檔–點擊上面菜單的:微信開發者工具–>關於–>打開api文檔
生成HelloWorld小程序以後點擊它的主頁面進入一個子頁面能夠查看啓動的日誌信息。
注:下圖的無限多個只是理論上的。過多的頁面違背小程序的設計初衷。小程序的整體的壓縮文件包的體積超過1MB將不能上傳(最新版本上傳限制在2MB)。
無限多個
無限多個
無限多個
應用程序入口
一級頁面
二級頁面
三四五級頁面--最多五級
每個頁面由如下文件組成
wxml
wxss
json
js
小程序自生成的目錄結構
在app.json中設置打開的是哪一個頁面
P.S.:json文件是不能夠隨意加註釋的。
圖片大小px與rpx:
px在這裏不是指圖片屬性的物理像素,而是Iphone6上的邏輯分辨率概念。Iphone6上物理分辨率和邏輯像素的2:1的關係。也就是說,在iphone6上面,2rpx=1px。
爲了動態去適應不一樣分辨率的設備,咱們用rpx(邏輯分辨率)作適應。設計圖是0-750的像素,大小能夠直接轉化成rpx。
如何設置樣式:
方式一(動態樣式):在標籤中加入style屬性,寫入當前標籤樣式
方式二(靜態樣式):寫wxss文件–在標籤上加入一個class屬性,經過class選擇器寫css樣式。wxss文件不須要單獨去引用。由於註冊的是以某名字爲名名的全部文件。
例子:
wxml文件:
wxss文件:
用來將堆疊在一塊兒的元素變規整,顯示成列排布
colum:列排布
row:橫向排布
align-items用來設置對齊版式,center表示左右居中
全局同樣的樣式能夠提到全局的樣式設置裏面設置。
不能在容器中直接設置background-color的顏色。由於容器沒有設置高度和寬度,它會自適應裏面元素的高度和寬度。若是直接給一個高度的話,若是裏面內容是一個動態內容,可能會超出規定的高度和寬度,形成內容溢出。
解決方案:
通過調試咱們發現,系統在咱們規定的view容器外面還包了一層名叫page的容器。咱們去設置page的樣式
設置導航欄背景色:
在app.json中有window配置項 用於設置小程序的標題、狀態欄、導航條、窗口背景色。
其中navigationBarBackgroundColor用來設置導航欄背景色。
如何在比例不失真的狀況下顯示一張圖片?
1個pt能夠有1個px構成,也能夠有2個,3個甚至更多構成
一個pt下px越多,圖像顯示越細膩。兩倍已經達到了人眼可以分辨的極限,因此plus版本並不能比6和6S更加清晰。
iphone6下2個px構成1個pt
PPI=px開根號/屏幕尺寸
由於微信小程序顯示的375是邏輯分辨率,而設計圖通常給的是物理分辨率。
使用rpx做爲單位,小程序會自動在不一樣的分辨率下進行轉換。
在iphone6的尺寸進行設計的話,一個像素就是一個rpx。
不是全部的單位都適合用rpx
好比,文字不適合用rpx,否則設備自適應之後看不清文字。
錯誤VM285:1 pages/index/index.js 出現腳本錯誤或者未正確調用 Page()
須要在這個js裏寫一個page方法,裏面什麼都不寫就能夠。
一、在page文件夾下新建posts文件夾,在其中創建.js.wxml.wxss文件,並在.js文件中填入空的Page函數(若是不填會報錯)。
二、將原先的app.json的pages屬性數組之中加入新建的.wxml文件的地址(當把它放在第一個的時候,運行時默認先顯示它)。
注:快捷鍵F1打開命令面板,有不少快捷選項
swiper標籤表明輪播圖,裏面的字標籤swiper-item表明每一個圖片。
代碼示例:
swiper的相關屬性:
在子頁面的json文件裏能夠配置頁面的導航欄顏色等配置,從而不影響全局的配置。
可是隻能配置window這一個參數的屬性,因此window就不標了。直接將app.json裏的window參數展開,平鋪到子頁面的json文件中。
絕對路徑與相對路徑
部分代碼示例
posts.wxss
經驗:水平用rpx,垂直用px。(水平若是元素少到不可能發生換行也可用px)
posts.wxml
在編碼過程當中,可使用腳本文件將服務器的數據對接到小程序中。
編寫腳本文件時,在js文件中輸入page,開發工具會生成一個默認的腳本文件結構。
js文件全部的腳本代碼都會在名叫Page的json結構體中運行。
其中包含下列生命週期函數:
應用的生命週期:
先進行頁面初始化(onLoad)—>頁面顯示(onShow)–>頁面渲染完成(onReady)
注:js腳本中能夠自定義函數進行調用
在公衆平臺之中小程序完整的生命週期圖片以下
在網頁開發的過程當中,咱們要把一個數據顯示到頁面上的操做是:
先獲取DOM對象,再對獲取的節點的數據進行操做。
在小程序中提倡數據優先的思想。
在小程序中不支持DOM,因此在小程序的開發中的操做應該是:
在js腳本的data屬性中以json格式放入數據,在wxml文件中使用雙大括號調用。
示例以下:
js腳本:
wxml:
小程序在這裏實現的數據綁定是單向數據綁定
也就是說,數據能夠從腳本文件向wxml文件傳遞的時候可直接賦值,可是若是數據被wxml文件所改變,腳本文件中的數據不會發生變化。若是要經過wxml改變腳本文件中的數據,則須要採起事件傳遞的形式。
顯示從服務器動態獲取的數據
假設數據是從腳本文件向服務器動態獲取的,那麼應該在頁面初始化以後顯示數據。也就是說數據綁定的操做應該寫在onLoad函數裏面來,以後再使用setData()函數平鋪入data數組之中。
示例:
js腳本
對應wxml文件
注:
緣由:賦給這個屬性的false是個字符串,小程序在解析字符串的時候會將其轉換成布爾值,此字符串的布爾值是true。
例子以下:
解決方法:使用數據綁定的語法,將false用雙花括號括起來,這樣纔會解析成false。
同理,設置某個屬性爲true的時候,隨便置入一個字符串的值,都會被解析成true。
若是js腳本外再包一層json對象,那麼須要經過"{{對象名.屬性名}}"進行調用
示例:
注:兩個數據綁定挨在一塊兒是能夠正常解析的。
使用示例:
固然,能夠經過腳本文件來動態控制標籤元素的顯示與隱藏。
好比:
同理,也能夠在雙花括號之中進行加減乘除的數字計算。
若是服務器拿過來的數據是一個json數組,那麼須要小程序的for循環進行動態的展現。
json數組示例:
以上作法會出現顯示不了的問題
緣由:this.setData方法是將參數平鋪置入data數組中,在進行循環顯示的時候會顯示不全。
解決方法:給數據數組一個key並置入data中,這樣data解析出來就會是一個數組。
wxml展現示例:
block標籤:理解爲括號,將循環體給包裹起來
注:若是指代爲item,則可省略。由於微信小程序默認的元素指代就是以item命名的。
一、在app.json的頁面指定的位置將歡迎頁設置爲第一個頁面。
二、目的:點擊歡迎頁的按鈕,跳轉到以前作好的新聞展現頁中(上圖頁面對應posts)
三、綁定事件–tap事件(tap事件詳情見以下表格)
標籤事件綁定的寫法:事件名前面加bind
4.在腳本文件中寫入函數負責頁面跳轉
注:填入的url能夠是相對路徑也能夠是絕對路徑,可是須要和app.json中配置的形式一致(不要加.wxml)
5.設置將跳轉進來的頁面不設爲上一個頁面的子頁面(取消左上角返回)
實現兩個頁面之間的平行跳轉。
效果:
關於這兩個函數完整的參數:
當調用wx.redirectTo方法時,腳本後臺會調用onUnLoad(頁面被卸載以後觸發)事件。
當調用wx.navigateTo方法時,腳本後臺會調用onHide(頁面被隱藏以後觸發)事件。
什麼是事件?
使用WXS函數響應事件–基礎庫 2.4.4 開始支持,低版本需作兼容處理。
從基礎庫版本2.4.4開始,支持使用WXS函數綁定事件,WXS函數接受2個參數,第一個是event,在原有的event的基礎上加了event.instance對象,第二個參數是ownerInstance,和event.instance同樣是一個ComponentDescriptor對象。
事件分爲冒泡事件和非冒泡事件:
WXML的冒泡事件列表:
注:除上表以外的其餘組件自定義事件如無特殊聲明都是非冒泡事件,如 form 的submit事件,input 的input事件,scroll-view 的scroll事件,(詳見各個組件)
事件綁定的寫法同組件的屬性,以 key、value 的形式。
key 以bind或catch開頭,而後跟上事件的類型,如bindtap、catchtouchstart。自基礎庫版本 1.5.0 起,在非原生組件中,bind和catch後能夠緊跟一個冒號,其含義不變,如bind:tap、catch:touchstart。
value 是一個字符串,須要在對應的 Page 中定義同名的函數。否則當觸發事件的時候會報錯。
bind事件綁定不會阻止冒泡事件向上冒泡,catch事件綁定能夠阻止冒泡事件向上冒泡。
正常的流程應該是從腳本文件向服務器發一個請求去請求數據到js腳本文件,可是小程序目前沒有服務器數據,將數據大量羅列到js腳本文件很是的不利於閱讀。
解決方式:
將所需數據全都放到一個單獨的文件中去,從腳本文件加載數據文件,從而模擬從服務器加載數據的過程。
流量限制
關注公衆號:Java架構師聯盟,每日更新技術好文