邏輯層分析 應用程序邏輯app.js

2449059-b5b503c12ecac1da.jpg
timg.jpg

應用程序邏輯app.js

app.js作爲項目主入口文件,用於創建應用程序對象

// App函數是一個全局函數,用於創建應用程序對象
App({ 
 //全局數據對象(可以整個應用程序共享)
  globalData: { ... },          // 應用程序全局方法 
  method1 (p1, p2) { ... },
  method2 (p1, p2) { ... },     //生命週期方法
  // 應用程序啓動時觸發一次
  onLaunch () { ... },          // 當應用程序進入前臺顯示狀態時觸發
  onShow () { ... },            // 當應用程序進入後臺狀態時觸發
  onHide () { ... }
})

也就是說,當應用程序啓動時會自動執行項目目錄下的app.js文件。

在app.js中通過調用全局App([option])方法創建一個應用程序實例。

其中通過參數指定的一些特定的方法,會在特定的執行時機去執行,也就是說通常所說的生命週期事件方法。

屬性 類型 描述 觸發時機
onLaunch Function 生命週期函數–監聽小程序初始化 當小程序初始化完成時,會觸發 onLaunch(全局只觸發一次)
onShow Function 生命週期函數–監聽小程序顯示 當小程序啓動,或從後臺進入前臺顯示,會觸發 onShow
onHide Function 生命週期函數–監聽小程序隱藏 當小程序從前臺進入後臺,會觸發 onHide

也可以定義任意其他的對象成員(例如:方法和屬性),這些成員可以在內部直接使用,或者外部通過獲取app對象調用:

屬性 類型 描述
其他 Any 開發者可以添加任意的函數或數據到 Object 參數中,用 this 可以訪問,一般用於存放業務邏輯配置,比如:API地址
app.js
App({
  data1: '123',  
  data2: { message: 'hello world' },  
  api: {    
      list: 'https://github.com/zce/',    
      detail: 'https://github.com/zce/',
  },
  foo () {
      return 'bar'
  }
})
other.js
// getApp 也是全局函數,可以在任意地方調用,用於獲取全局應用程序實例對象
var app = getApp()
console.log(app.data1)
console.log(app.data2)
console.log(app.foo())

頁面邏輯[page-name].js

[page-name].js是一個頁面的重要組成部分,用於創建頁面對象

// 獲取全局應用程序對象const app = getApp()
// Page也是一個全局函數,用來創建頁面對象

Page({  
  // ========== 頁面數據對象(可以暴露到視圖中,完成數據綁定) ==========
  data: { ... },   
  // ========== 頁面方法(可以用於抽象一些公共的行爲,例如加載數據,也可以用於定義事件處理函數) ==========
  method1 (p1, p2) { ... },
  method2 (p1, p2) { ... },  
  // ========== 生命週期方法 ==========
  // 頁面加載觸發
  onLoad () { ... }

  ...
})

在應用程序執行到當前頁面時,會執行當前頁面下對應的[page-name].js文件。
在[page-name].js中通過調用全局Page([option])方法創建一個頁面實例。
Page([option])方法[option]參數說明

屬性 類型 描述
data Object 頁面的初始數據
onLoad Function 生命週期函數–監聽頁面加載
onReady Function 生命週期函數–監聽頁面初次渲染完成
onShow Function 生命週期函數–監聽頁面顯示
onHide Function 生命週期函數–監聽頁面隱藏
onUnload Function 生命週期函數–監聽頁面卸載
onPullDownRefreash Function 頁面相關事件處理函數–監聽用戶下拉動作
其他 Any 開發者可以添加任意的函數或數據到 object 參數中,用 this 可以訪問

如果你有更好的心得和建議,歡迎拍磚一起探討。 歡迎加入【編程技術微分享】,加入(596888158)請留言,或聯繫QQ:Mr.Chen(1182929304)