微信小程序学习笔记(4)--------框架之逻辑层
? ? ? 邏輯層
? ? ? ??? ?邏輯層(App?Service):小程序框架的邏輯層是由JavaScript編寫的,邏輯層將數據進行處理后發送給視圖層,同時接受視圖層的事件反饋。
? ? App進行程序注冊,Page進行頁面注冊
? ? getApp獲取App實例,getCurrentPages獲取當前頁面棧
一、程序注冊?
1、App
?????? ?App()函數用來注冊小程序。接受一個Object參數,其指定小程序的生命周期函數。
? ? ?注意:App()必須在app.js中注冊,而且不能注冊多個
? ? Object參數說明
| 屬性 | 類型 | 描述 | 觸發時機 |
| onLaunch | Function | 生命周期函數--初始化 | 初始化完成是,只會觸發一次 |
| onShow | Function | 生命明明周期函數--小程序顯示 | 啟動時,或從后臺進入前臺顯示 |
| onHide | Function | 生命周期函數--小程序隱藏 | 從前臺進入后臺 |
| 其他 | Any | 開發者可以添加任意的函數或數據到Object參數中,用this可以訪問 | ? |
?
2、getApp()
? ? ? ? ? ? ?getApp()是全局函數,可以獲取小程序實例。
? ? 注意:不要在定義App()內的函數中調用getApp(),使用this就可以拿到app實例。通過getApp()獲取實例后,不要私自調用生命周期函數。
3、getCurrentPages()
? ? ? ? ??不要在onLaunch的時候調用getCurrentPages(),app還沒有生成。
?
二、頁面注冊
Page
? ? Page()函數用來注冊一個頁面,接受一個Object參數,其指定頁面的初始數據、生命周期函數、事件處理函數等。
?
| 屬性 | 類型 | 描述 |
| data | Object | 頁面的初始數據 |
| onLoad | Function | 生命周期函數--監聽頁面加載 |
| onReady | Function | 生命周期函數--監聽頁面初次渲染完成 |
| onShow | Function | 生命周期函數--監聽頁面顯示 |
| onHide | Function | 生命周期函數--監聽頁面隱藏 |
| onUnload | Function | 生命周期函數--監聽頁面卸載 |
| onPullDownRefresh | Function | 頁面相關事件處理函數--監聽用戶下拉動作 |
| onReachBottom | Function | 頁面上拉觸底事件的處理函數 |
| 其他 | Any | 開發者可以添加任意的函數或數據到?object?參數中,在頁面的函數中用?this?可以訪問 |
?
1、初始化數據
??????初始化數據將作為頁面的第一次渲染。data將會以JSON的形式由邏輯層傳至渲染層,所以其數據必須是可以轉換成JSON的格式:字符串,數字,布爾值,對象,數組。
?????渲染層可以通過wxml對數據進行綁定。
?2、生命周期函數
(1)、onLoad:頁面加載
????????????一個頁面只會調用一次
? ? ?接收頁面參數可以獲取wx.navigateTo和wx.redirectTo及<navigator/>中的?query。
(2)、onShow:頁面顯示
???????????每次打開頁面都會調用?一次
(3)、onReady:頁面初次渲染完成。
?????? ?一個頁面只會調用一次,代表頁面已經準備妥當,可以和試圖層進行交互
(4)、onHide:頁面隱藏
??????????????當navigateTo或底部tab切換時調用。
(5)、onUnload:頁面卸載
? ? ? ? ? ??當redirectTo或navigateBack的時候調用。
3、頁面相關事件處理函數
? ? ? ? ? ? ??OnPullDownRefresh:下拉刷新需要在config的windows選項中開啟enablePullDownRefresh。當處理完數據刷新后,wx.stopPullDownRefresh可以停止當前頁面的下拉刷新。
4、事件處理函數
? ? ? ? ? ?除了初始化數據和生命周期函數,Page?中還可以定義一些特殊的函數:事件處理函數。在渲染層可以在組件中加入事件綁定,當達到觸發事件時,就會執行?Page?中定義的事件處理函數。
?Page.prototype.setData()
???? ?setData?函數用于將數據從邏輯層發送到視圖層,同時改變對應的?this.data?的值。
? ? 注意:
? ? 1.?直接修改?this.data?無效,無法改變頁面的狀態,還會造成數據不一致。
? ? 2.?單次設置的數據不能超過1024kB,請盡量避免一次設置過多的數據。
?setData()?參數格式
? ? ? ? ? ??接受一個對象,以?key,value?的形式表示將?this.data?中的?key?對應的值改變成?value。
其中?key?可以非常靈活,以數據路徑的形式給出。
? getCurrentPages()
? ? getCurrentPages()?函數用于獲取當前頁面棧的實例,以數組形式按棧的順序給出,第一個元素為首頁,最后一個元素為當前頁面。
? ? 注意:不要嘗試修改頁面棧,會導致路由以及頁面狀態錯誤。
三、模塊化
文件作用域
? ? 在?JavaScript?文件中聲明的變量和函數只在該文件中有效;不同的文件中可以聲明相同名字的變量和函數,不會互相影響。
? ? 通過全局函數 getApp()可以獲取全局的應用實例,如果需要全局的數據可以在?App()?中設置。
模塊化
? ? 我們可以將一些公共的代碼抽離成為一個單獨的?js?文件,作為一個模塊。模塊只有通過?module.exports?或者?exports?才能對外暴露接口。
需要注意的是:
? ? exports?是?module.exports?的一個引用,因此在模塊里邊隨意更改?exports?的指向會造成未知的錯誤。所以我們更推薦開發者采用module.exports?來暴露模塊接口。
四、API
轉載于:https://www.cnblogs.com/joe-tang/p/8058351.html
總結
以上是生活随笔為你收集整理的微信小程序学习笔记(4)--------框架之逻辑层的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分页效果的实现
- 下一篇: 图片识别文字, OCR