一、小程序應(yīng)用場景
小程序主打的是比APP更輕量的形態(tài),簡單的開發(fā),卻接近app的體驗,無需下載,掃碼打開。一些高頻的金融類、電商類、教育類等其實是不適合接入小程序的。這些應(yīng)用服務(wù)對功能的要求都很重,小程序難以承載。而且小程序不能像微信公眾號一樣被關(guān)注、群推送消息以及轉(zhuǎn)發(fā)朋友圈,這也就意味著,它沒有辦法獲取用戶更多的信息,也不便于深度營銷。
主打適合小程序的產(chǎn)品:
* 初創(chuàng)型企業(yè)的MVP產(chǎn)品
*開發(fā)和設(shè)計能力有限的產(chǎn)品
*功能輕、用完即走、非即時、可異步
*基于輕社交場景應(yīng)用、跨平臺使用
二、從操作 DOM 轉(zhuǎn)為操作數(shù)據(jù)
微信開放的接口更為嚴謹,結(jié)構(gòu)必須采用他提供給我們的組件,外部的框架和插件都不能在這里使用,讓開發(fā)者完全脫離操作 DOM,開發(fā)思想轉(zhuǎn)變很大。
生命周期:( 從index.js文件看)
1) 在首頁的console 可以看出順序是 App Launch-->App Show-->onload-->onShow-->onReady。
首先是整個 app 的啟動與顯示,app 的啟動在 app.js 里面可以配置,其次再進入到各個頁面的加載顯示等等。
例如,App()函數(shù)用來注冊一個小程序,接受一個Object參數(shù),其指定小程序。
生命周期函數(shù)等。
App({
onLaunch: function() {
// Do something initial when launch.
},
onShow: function() {
// Do something when show.
},
onHide: function() {
// Do something when hide.
},
globalData: 'I am global data'
})
2)小程序的開發(fā)是基于微信提供的一套應(yīng)用框架進行開發(fā)的。微信通過封裝微信客戶端提供的文件系統(tǒng)、網(wǎng)絡(luò)通信、任務(wù)管理、數(shù)據(jù)安全等基礎(chǔ)功能,對上層提供了一套完整的Javascript Api,使得開發(fā)者能夠非常方便的使用到微信客戶端提供的各種基礎(chǔ)功能,快速構(gòu)建一個應(yīng)用。
框架提供了自己的視圖層描述語言 WXML 和 WXSS,以及基于 JavaScript 的邏輯層框架,并在視圖層與邏輯層之間通過**單向數(shù)據(jù)綁定**進行數(shù)據(jù)傳輸,使開發(fā)者更加聚焦于數(shù)據(jù)與邏輯上。
三、新建的項目各文件詳解:
1)?pages文件夾:是頁面管理文件夾
下面一般可以自定義頁面,如demo中的index歡迎頁面。首頁index頁面包含幾個文件:index.js,index.wxss,index.wxml,index.json
先來逐一介紹下這些文件是干嘛的。
index.js文件是以js結(jié)尾的文件,是頁面的腳本文件,在這個文件中我們可以監(jiān)聽并處理頁面的生命周期函數(shù),獲取小程序?qū)嵗?,聲明并處理?shù)據(jù),響應(yīng)頁面交互事件等。是必須要的。
index.wxml文件是頁面的結(jié)構(gòu)文件(類似于H5的html標記文件)。是必須要的。
index.wxss文件是頁面的樣式表。非必要。當有頁面樣式表文件時候,頁面樣式表中的樣式規(guī)則會層疊覆蓋app.wxss文件中的樣式規(guī)則。如果不指定頁面的樣式規(guī)則表,也可以在頁面的結(jié)構(gòu)文件中直接使用app.wxss中指定的樣式規(guī)則。
index.json文件是頁面的配置文件。非必要。當有頁面的配置文件時候,配置項在該頁面會覆蓋app.json文件中的window中相同的配置項,如果沒有指定配置文件,則在該頁面直接使用app.json中的默認配置文件。
2)?app.js文件是小程序的腳本代碼。監(jiān)聽并處理小程序的生命周期函數(shù),并聲明全局變量,調(diào)用框架的API,同步存儲和同步讀取本地數(shù)據(jù)。

js代碼中定義了一個App對象,該對象包含onLaunch, getUserInfo兩個方法和globalData成員變量。
其中onLaunch方法會在程序啟動時由框架來進行調(diào)用。在該方法中,程序通過微信提供的本地存儲接口getStorgeSync()獲取了一個logs變量,第一次獲取時會返回空,這時將變量初始化為空數(shù)組。之后在數(shù)組頭部添加一個格式化的時間字符串,之后將數(shù)組變量存儲在本地。
getUserInfo方法需要調(diào)用者傳遞一個名為cb的參數(shù),首先判斷是否獲取過用戶信息,如果獲取過并且cb是函數(shù)的話,就會調(diào)用cb函數(shù)并將globalData成員變量傳遞進去,否則將調(diào)用wx.login接口來獲取用戶信息。在調(diào)用wx.login時,傳遞了一個匿名函數(shù)進行調(diào)用成功后的邏輯處理,就是success后面的部分??梢钥吹竭@里只有函數(shù)定義而沒有函數(shù)名稱,因此除了作為回調(diào)函數(shù)外,也無法在其它地方調(diào)用該函數(shù)。
在回調(diào)函數(shù)中執(zhí)行了that.globalData.userInfo = res.userInfo來保存用戶信息,其中that變量由var that = this賦值,因此該變量指向app對象本身,所以才能成功保存用戶信息。
我們可以看到that對象是getUserInfo方法棧上的變量,如果沒有閉包技術(shù),此處的匿名回調(diào)函數(shù)是不能直接使用that變量的,就需要將app對象傳遞給回調(diào)函數(shù)(全局變量或函數(shù)參數(shù)的方式),而在閉包技術(shù)的支持下,回調(diào)函數(shù)可以像使用函數(shù)內(nèi)部變量一樣來訪問that變量。
?globalData是成員變量,該成員包含userInfo變量,用來保存用戶信息。
3)app.json文件是對整個小程序的全局配置。可以在該文件中配置小程序有哪些頁面組成,配置小程序窗口背景,配置導(dǎo)航條樣式,配置默認標題。(注意,不可添加注釋)
4)app.wxss文件是小程序的公共樣式表文件。我們可以在頁面組件的class屬性上直接使用app.wxss文件中聲明的樣式規(guī)則。?在index.wxss中設(shè)計組件位置和屬性樣式。