### 2.1.1 邏輯層--App Service
小程序開發框架的邏輯層由 JavaScript 編寫。
邏輯層將數據進行處理后發送給視圖層,同時接受視圖層的事件反饋。
在 JavaScript 的基礎上,我們做了一些修改,以方便地開發小程序。
* 增加 `App` 和 `Page` 方法,進行程序和頁面的注冊。
* 增加 `getApp` 和 `getCurrentPages` 方法,分別用來獲取 App 實例和當前頁面棧。
* 提供豐富的 API,如微信用戶數據,掃一掃,支付等微信特有能力。
* 每個頁面有獨立的作用域,并提供模塊化能力。
* 由于框架并非運行在瀏覽器中,所以 JavaScript 在 web 中一些能力都無法使用,如 `document`,`window` 等。
* 開發者寫的所有代碼最終將會打包成一份 JavaScript,并在小程序啟動的時候運行,直到小程序銷毀。類似 `ServiceWorker`,所以邏輯層也稱之為 `App Service`。
1. **文件作用域**
在 JavaScript 文件中聲明的變量和函數只在該文件中有效;不同的文件中可以聲明相同名字的變量和函數,不會互相影響。
通過全局函數 `getApp()` 可以獲取全局的應用實例,如果需要全局的數據可以在 `App()` 中設置,如:
~~~JavaScript
// app.js
App({
globalData: 1
})
~~~
~~~JavaScript
// a.js
// The localValue can only be used in file a.js.
var localValue = 'a'
// Get the app instance.
var app = getApp()
// Get the global data and change it.
app.globalData++
~~~
~~~JavaScript
// b.js
// You can redefine localValue in file b.js, without interference with the localValue in a.js.
var localValue = 'b'
// If a.js it run before b.js, now the globalData shoule be 2.
console.log(getApp().globalData)
~~~
2. **模塊化**
可以將一些公共的代碼抽離成為一個單獨的 js 文件,作為一個模塊。模塊只有通過 `module.exports` 或者 `exports` 才能對外暴露接口。
>[warning] * `exports` 是 `module.exports` 的一個引用,因此在模塊里邊隨意更改 `exports` 的指向會造成未知的錯誤。所以更推薦開發者采用 `module.exports` 來暴露模塊接口,除非你已經清晰知道這兩者的關系。
> * 小程序目前不支持直接引入 `node_modules` , 開發者需要使用到 `node_modules` 時候建議拷貝出相關的代碼到小程序的目錄中。
~~~JavaScript
// common.js
function sayHello(name) {
console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
console.log(`Goodbye ${name} !`)
}
module.exports.sayHello = sayHello
exports.sayGoodbye = sayGoodbye
~~~
在需要使用這些模塊的文件中,使用 `require(path)` 將公共代碼引入
~~~JavaScript
var common = require('common.js')
Page({
helloMINA: function() {
common.sayHello('MINA')
},
goodbyeMINA: function() {
common.sayGoodbye('MINA')
}
})
~~~
>[warning]require 暫時不支持絕對路徑
- 微信
- 小程序
- 1. 代碼組成
- 1.1 JSON配置--'*.json'文件
- 1.2 WXML模板--'*.wxml'文件
- 1.3 WXSS樣式--'*.wxss'文件
- 1.4 JavaScript腳本--'*.js'文件
- 2. 客戶端運行
- 2.1 邏輯層和渲染層
- 2.1.1 邏輯層--App Service
- 2.1.2 渲染層/視圖層--View
- 2.1.3 通信模型
- 2.1.4 數據驅動
- 2.1.5 雙線程下的界面渲染
- 2.2 程序與頁面
- 2.3 組件
- 2.4 API
- 2.5 事件
- 2.6 兼容
- 3. 應用設計
- 3.1 Flex布局
- 3.2 界面常見的交互反饋
- 3.3 發起HTTPS網絡通信--wx.request
- 3.4 微信登錄
- 3.5 本地數據緩存
- 3.6 設備能力
- 4. 小程序的協同工作和發布
- 4.1 協同工作
- 4.2 用戶體驗審視
- 4.3 發布
- 4.4 運營
- 5. 底層框架
- 5.1 雙線程模型
- 5.2 組件系統--Exparser框架
- 5.3 原生組件
- 5.4 小程序與客戶端通信原理
- 6. 運行和性能優化
- 6.1 啟動--代碼加載
- 6.2 頁面準備
- 6.3 數據通信
- 6.4 視圖層渲染
- 6.5 原生組件通信
- 7. 小程序基礎庫的更新迭代
- 8. 微信開發者工具
- 騰訊云支持
- wafer
- Wafer2 快速開發 Demo - PHP
- WXAPI
- api列表