
作為一名后端開(kāi)發(fā)人員,我希望能從后端語(yǔ)言的某些模式來(lái)理解小程序,讓我快速的入門(mén)。
今天我們依然模擬一個(gè)女項(xiàng)目經(jīng)理和后端工程師的博弈,為你逐步展開(kāi)小程序的面紗。
角色定位
- 女一號(hào) 大櫻桃:女項(xiàng)目經(jīng)理,30歲,未婚。
- 男一號(hào) 老沙:帥氣的后端工程師,30歲,已婚。

App
當(dāng)聽(tīng)到大櫻桃這樣說(shuō)自己的時(shí)候,老沙明白的確是自己的問(wèn)題,小程序工具為我們生成了一個(gè)基礎(chǔ)的框架,但是這個(gè)框架里的文件都是做什么用,每個(gè)文件如何去操作他并不知道,這的確是一個(gè)問(wèn)題。
于是老沙決定用30分鐘的時(shí)候先研究下其中的 app.js / app.json / app.wxss / project.config.json
app.js
從微信小程序官方文檔我們知道:“小程序包含一個(gè)描述整體程序的 app 和多個(gè)描述各自頁(yè)面的 page?!?,而app的構(gòu)建、維護(hù)以及配置就是由上面4個(gè)文件管理的。
@@nai8@@
當(dāng)我們打開(kāi)一個(gè)小程序的時(shí)候,伴隨著生成一個(gè)小程序的實(shí)例,這個(gè)很像yii中入口對(duì)application的生成邏輯。
同時(shí)提供了一個(gè)叫做App()的函數(shù)用來(lái)接收
小程序?qū)嵗?/strong>
完成最后的注冊(cè),這個(gè)函數(shù)存在于app.js中,而所謂的注冊(cè),里面可以包含我們自己的邏輯,比如啟動(dòng)后你想做什么?遇到錯(cuò)誤你想做什么,這些都可以在注冊(cè)小程序的時(shí)候?qū)崿F(xiàn)。
打開(kāi)你的app.js,你發(fā)現(xiàn)有4+個(gè)函數(shù),4個(gè)內(nèi)置函數(shù)和你可以自己定義的N個(gè)函數(shù)。

名詞解釋
- onLanuch 當(dāng)小程序初始化完成時(shí),會(huì)觸發(fā) onLaunch(全局只觸發(fā)一次)
- onShow 當(dāng)小程序啟動(dòng),或從后臺(tái)進(jìn)入前臺(tái)顯示,會(huì)觸發(fā) onShow
- onHide 當(dāng)小程序從前臺(tái)進(jìn)入后臺(tái),會(huì)觸發(fā) onHide
- onError 當(dāng)小程序發(fā)生腳本錯(cuò)誤,或者 api 調(diào)用失敗時(shí),會(huì)觸發(fā) onError 并帶上錯(cuò)誤信息
這里有一個(gè)疑問(wèn)我想大家也會(huì)遇到,就是前后臺(tái)的概念,簡(jiǎn)單的說(shuō)就是當(dāng)你在左上角關(guān)閉小程序后(或按home鍵退出微信),這個(gè)小程序并不會(huì)真正的銷(xiāo)毀而是進(jìn)入后臺(tái)模式運(yùn)行,當(dāng)再次打開(kāi)進(jìn)入前臺(tái)運(yùn)行而非重新啟動(dòng)。
最明顯的一個(gè)現(xiàn)象就是你在小程序某個(gè)特定頁(yè)面關(guān)閉小程序,再次打開(kāi)會(huì)直接進(jìn)入這個(gè)特定頁(yè)面而非啟動(dòng)頁(yè)。
globalData
這個(gè)字段也很有用。用來(lái)存放一些全局的東西,比如統(tǒng)一的遠(yuǎn)程接口地址等,這里設(shè)置的值是有辦法在其他page頁(yè)面使用的。
比如某個(gè)小程序的globalData如下圖

N個(gè)函數(shù)
我們都知道除了內(nèi)置的函數(shù),我們也可以在app.js里寫(xiě)其他函數(shù),那么問(wèn)題來(lái)了?什么函數(shù)要寫(xiě)到app.js里那?
回答這個(gè)問(wèn)題之前我們要先知道一個(gè)事情,那就是在小程序的其他頁(yè)面可以通過(guò)getApp函數(shù)獲取到app對(duì)象,進(jìn)而可以調(diào)用app.js里的東西,也就是說(shuō)你在app.js里定義的那些N個(gè)函數(shù)可以被其他頁(yè)面獲取并使用。
這樣你明白了吧?比如登錄函數(shù)、獲取用戶(hù)信息、彈出框等用于整個(gè)app的高頻函數(shù)都可以寫(xiě)到app.js中。
研究到此,老沙欣慰的一笑,先來(lái)杯咖啡。

onLaunch
接下來(lái)老沙決定研究一下onLaunch函數(shù),首先要說(shuō)的是onLaunch的參數(shù)options里都有什么?很簡(jiǎn)單,在onLaunch函數(shù)內(nèi)寫(xiě)下了console.log(options)將它打印到控制臺(tái)。

在今后的日子里,如果你不清楚一個(gè)對(duì)象或參數(shù)什么的,記住使用console.log打印到控制臺(tái),很方便。
當(dāng)然,onLaunch可以獲取很多參數(shù),比如path代表打開(kāi)小程序的路徑,當(dāng)你分享小程序某個(gè)頁(yè)面A到微信群,別人通過(guò)A打開(kāi)了小程序,則path就是A頁(yè)面的路徑。
關(guān)于參數(shù)的詳細(xì)介紹可以看下圖

path、query、scene是常規(guī)的參數(shù),在特定情況下會(huì)出現(xiàn)其他參數(shù),比如當(dāng)你要捕獲群分享后的數(shù)據(jù)時(shí)shareTicket參數(shù)會(huì)出現(xiàn)等等。
一般來(lái)說(shuō)當(dāng)一個(gè)小程序啟動(dòng)后就需要做的事情可以寫(xiě)到onLaunch函數(shù),比如登錄。
而onShow接收的參數(shù)和onLanuch是一致的。
注意點(diǎn)
官方給了一些注意點(diǎn),基本就是所有了,列下方便大家學(xué)習(xí)。
- App() 必須在 app.js 中注冊(cè),且不能注冊(cè)多個(gè)。
- 不要在定義于 App() 內(nèi)的函數(shù)中調(diào)用 getApp() ,使用 this 就可以拿到 app 實(shí)例。
- 不要在 onLaunch 的時(shí)候調(diào)用 getCurrentPages(),此時(shí) page 還沒(méi)有生成。
- 通過(guò) getApp() 獲取實(shí)例之后,不要私自調(diào)用生命周期函數(shù)。
對(duì)于上面的getApp你可能還不了解,接下來(lái)研究下。
getApp
這是一個(gè)函數(shù),主要目的是在其他頁(yè)面獲取app實(shí)例,比如接下來(lái)的代碼

獲取后你就可以在頁(yè)面函數(shù)體內(nèi)直接調(diào)用app.js的函數(shù)和數(shù)據(jù),比如 http://app.xxx() 或app.globalData這樣。
這里要重復(fù)下上面的注意事項(xiàng):不要在定義于 App() 內(nèi)的函數(shù)中調(diào)用 getApp()
app.json
一頓研究后,老沙對(duì)app.js已經(jīng)基本了解,接下來(lái)攻克app.json這個(gè)文件。微信官方是這樣說(shuō)的:“app.json文件用來(lái)對(duì)微信小程序進(jìn)行全局配置,決定頁(yè)面文件的路徑、窗口表現(xiàn)、設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間、設(shè)置多 tab 等。”
接下來(lái)用老百姓的話為大家解釋下:
- 將頁(yè)面注冊(cè)到小程序如何配置?找app.json
- 如何設(shè)置導(dǎo)航欄顏色?找app.json
- 如何制定窗口背景顏色?找app.json
- 如何啟動(dòng)下拉功能?找app.json
- 如何設(shè)置小程序底部tab切換頁(yè)面?找app.json
- 如何設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間?找app.json
一句話,和小程序自身相關(guān)的配置,去app.json里找。
關(guān)于app.json里的詳細(xì)配合可以參考官方地址
https://mp.weixin.qq.com/debu...
app.wxss
最好理解的就是它了,上篇大家已經(jīng)知道wxss是樣式文件,app.wxss則是小程序的全局樣式,它可以應(yīng)用到所有page頁(yè)面。
wxss是微信小程序自己定義的樣式語(yǔ)言,它支持內(nèi)聯(lián)、導(dǎo)入等等。同時(shí)具有css大部分的特性,所以你可以像寫(xiě)css一樣寫(xiě)它們。
關(guān)于使用方法可以參考
https://mp.weixin.qq.com/debu...
project.config.json
這是一個(gè)項(xiàng)目配置文件,比如項(xiàng)目的名字,appid等等。
如果你還不懂,可以看下開(kāi)發(fā)工具的詳情,那里面的設(shè)置和project.config.json是一樣的,一個(gè)配置文件,一個(gè)可視化的,目的是一樣的。

小結(jié)
30分鐘過(guò)去了,老沙基本搞明白了入口的邏輯,趕緊給大櫻桃看看去。
.......
10分鐘過(guò)去了
.......
老沙低著腦袋回來(lái)了,為何?下回給你說(shuō)。
相關(guān)閱讀:
小北微信小程序小白系列教程第一篇-- Hello World
本文作者:北哥 個(gè)人站長(zhǎng) @ 北哥兄弟連
原文地址:小北微信小程序之小白教程系列之-入口-入門(mén)系列-小程序社區(qū)-微信小程序-微信小程序開(kāi)發(fā)社區(qū)-小程序開(kāi)發(fā)論壇-微信小程序聯(lián)盟