|
邏輯層,是事務(wù)邏輯處理的地方。對(duì)于小程序而言,邏輯層就是.js腳本文件的集合。邏輯層將數(shù)據(jù)進(jìn)行處理后發(fā)送給視圖層,同時(shí)接收視圖層的事件反饋。 微信小程序開發(fā)框架的邏輯層是由JavaScript編寫。在JavaScript的基礎(chǔ)上,微信團(tuán)隊(duì)做了一些適當(dāng)?shù)男薷模员闾岣唛_發(fā)小程序的效率。主要修改包括: ♦ 增加app和page方法,進(jìn)行程序和頁面的注冊(cè) ♦ 提供豐富的API,如掃一掃、支付等微信特有的能力 ♦ 每個(gè)頁面有獨(dú)立的作用域,并提供模塊化能力。 邏輯層的實(shí)現(xiàn)就是編寫各個(gè)頁面的.js腳本文件。但由于小程序并非運(yùn)行在瀏覽器中,所以JavaScript在Web中的一些能力無法使用,如document、window等。 我們開發(fā)編寫的所有代碼最終會(huì)打包成一份JavaScript,并在小程序啟動(dòng)的時(shí)候運(yùn)行,直到小程序銷毀。
注冊(cè)程序:App()方法 在邏輯層,App()方法用來注冊(cè)一個(gè)小程序。App()接受一個(gè)object參數(shù),用于指定小程序的生命周期函數(shù)等。App()方法有且僅有一個(gè),存在于app.js中。object參數(shù)見下表 注意:onLaunch函數(shù)全局只觸發(fā)一次。 前臺(tái)、后臺(tái):用戶當(dāng)前界面運(yùn)行或操作小程序時(shí)為前臺(tái);當(dāng)用戶點(diǎn)擊左上角關(guān)閉,或者按了設(shè)備Home鍵離開微信,小程序并沒有直接銷毀,而是進(jìn)入后臺(tái);當(dāng)再次進(jìn)入微信或再次打開小程序,又會(huì)從后臺(tái)進(jìn)入前臺(tái)。 銷毀:只有當(dāng)小程序進(jìn)入后臺(tái)一定時(shí)間,或者系統(tǒng)資源占用過高,才會(huì)被真正銷毀。此時(shí)代表小程序的聲明周期結(jié)束。 關(guān)閉小程序(公共庫版本1.1.0開始支持): 當(dāng)用戶從掃一掃、轉(zhuǎn)發(fā)等入口(場(chǎng)景值為1007, 1008, 1011, 1025)進(jìn)入小程序,且沒有置頂小程序的情況下退出,小程序會(huì)被銷毀。 示例代碼:
App({
onLaunch: function(){
//啟動(dòng)時(shí)執(zhí)行的初始化工作
},
onShow: function(){
//小程序從后臺(tái)進(jìn)入前臺(tái)時(shí),觸發(fā)執(zhí)行的操作
},
onHide: function(){
//小程序從前臺(tái)進(jìn)入后臺(tái)時(shí),觸發(fā)執(zhí)行的操作
},
globalData:'I am global data'
})
onLaunch, onShow 參數(shù) 獲取更多轉(zhuǎn)發(fā)信息通常開發(fā)者希望轉(zhuǎn)發(fā)出去的小程序被二次打開的時(shí)候能夠獲取到一些信息,例如群的標(biāo)識(shí)。現(xiàn)在通過調(diào)用 wx.showShareMenu 并且設(shè)置 withShareTicket為 true ,當(dāng)用戶將小程序轉(zhuǎn)發(fā)到任一群聊之后,可以獲取到此次轉(zhuǎn)發(fā)的 shareTicket,此轉(zhuǎn)發(fā)卡片在群聊中被其他用戶打開時(shí),可以在 App.onLaunch() 獲取到另一個(gè) shareTicket。這兩步獲取到的 shareTicket 均可通過 wx.getShareInfo() 接口可以獲取到相同的轉(zhuǎn)發(fā)信息。
微信團(tuán)隊(duì)為開發(fā)者提供全局的getApp()函數(shù),可以用來獲取小程序?qū)嵗?。示例如下?/p> //other.js var app = getApp(); console.log(app.globalData);//I am global data
注意:
♦ App()方法須在app.js中注冊(cè),且不能注冊(cè)多個(gè)。
♦ 不要再定義App()內(nèi)的函數(shù)中調(diào)用getApp(),使用this就可以拿到App實(shí)例。
♦ 通過getApp()獲取實(shí)例之后,不要私自調(diào)用生命周期函數(shù)。
注冊(cè)頁面:Page()方法 在邏輯層,Page()方法用來注冊(cè)一個(gè)頁面。Page()接受一個(gè)object參數(shù),用于指定頁面的初始數(shù)據(jù)、生命周期函數(shù)、事件處理函數(shù)等。Page()方法每個(gè)頁面有且僅有一個(gè),存在于該頁面的.js文件中。 示例代碼:
Page({
Data: {
Text: 'This is page data.'
},
onLoad: function (options) {
//頁面加載時(shí)執(zhí)行的初始化工作
},
onReady: function () {
//頁面就緒后觸發(fā)執(zhí)行的操作
},
onShow: function () {
//頁面打開時(shí),觸發(fā)執(zhí)行的操作
},
onHide: function () {
//頁面隱藏時(shí),觸發(fā)執(zhí)行的操作
},
onUnload: function () {
//頁面關(guān)閉時(shí),觸發(fā)執(zhí)行的操作
},
onPullDownRefresh: function(){
//用戶在頁面下拉時(shí)執(zhí)行的操作
},
onReachBottom: function(){
//到達(dá)頁面底部時(shí)執(zhí)行的操作
},
//Event Handler
viewTap: function () {
this.setData({
text: 'set some data for updating view.'
})
},
})
注意:
♦ 不要在 onLaunch 的時(shí)候調(diào)用 getCurrentPages(),此時(shí) page 還沒有生成。
初始化數(shù)據(jù) 初始化數(shù)據(jù)將作為頁面的第一次渲染。對(duì)象data將會(huì)以JSON的形式由邏輯層傳至視圖層,所以其數(shù)據(jù)必須是可以轉(zhuǎn)成JSON的格式:字符串、數(shù)字、布爾值、對(duì)象、數(shù)組。視圖層可以通過WXML對(duì)數(shù)據(jù)進(jìn)行綁定。
<view>{{text}}view>
<view>{{array[0].msg}}view>
//demo.js
Page({
/**
* 頁面的初始數(shù)據(jù)
*/
data: {
text: 'init data',
array: [{msg:'1'},{msg:'2'}]
}
})
頁面的生命周期 |