微信小程序學習筆記

一. 微信小程序的項目結構

1. .json 后綴的 JSON 配置文件
1.1 小程序配置 app.json

app.json是對當前小程序的全局配置,包括小程序的所有頁面路徑、界面表現、網絡超時、底部tab等,常見的配置關鍵字如下,更多的配置見小程序配置app.json

  • pages字段 —— 用于描述當前小程序所有頁面路徑,這是為了讓微信客戶端知道當前你的小程序頁面定義在哪個目錄,數組的第一項代表小程序的初始頁面。小程序中新增/減少頁面,都需要對 pages 數組進行修改。
  • window字段 —— 小程序所有頁面的頂部背景顏色,文字顏色定義在這里的。
1.2 工具配置 project.config.json

開發者在開發工具上做的個性化配置都會被記錄在這個.json文件中,導入一個工程時,工具會根據這個文件設置對應的個性化設置。文件中的key值對應的作用還有待查詢。

1.3 頁面配置 page.json

每個頁面的個性化配置信息都存放在頁面對應的.json文件中,配置內容和app.json中key值為window一樣,page.json中的配置項會覆蓋app.jsonwindow的配置項,更多的配置見小程序配置app.json

2. .wxml 后綴的頁面結構文件

類似于.html文件,由標簽、屬性等構成,不一樣的地方如下:

  • 使用的標簽不一樣,微信小程序框架為我們提供了新的標簽,更多詳細的組件
  • 小程序提倡把渲染和邏輯分開,簡單地說就是不讓JS操作DOM,只負責管理狀態,然后再通過一種模板語法來描述狀態和界面結構的關系即可。通過{{}}把一個變量綁定到一個標簽上,但是只有變量還是不夠的,所以小程序還提供了if/else, for等控制能力,在小程序里邊,這些控制能力都用 wx: 開頭的屬性來表達,更多詳細的控制能力
3. .wxss 后綴的頁面樣式文件

.wxsscss的大部分特性,同時.wxss也做了擴展和修改,詳細的.wxss

  • 新增尺寸單位rpx,不需要開發者去做換算,小程序底層會去做換算
  • 提供了全局樣式和局部樣式,和前邊 app.json, page.json 的概念相同,你可以寫一個 app.wxss 作為全局樣式,會作用于當前小程序的所有頁面,局部頁面樣式 page.wxss 僅對當前頁面生效。
  • 此外 WXSS 僅支持部分 CSS 選擇器
4. .js 后綴的頁面交互邏輯

響應用戶交互、邏輯代碼都存放在.js中。同時微信還提供了很多API,可以讓開發者可以很方便的調用起微信提供的功能,如獲取用戶信息,本地存儲,支付功能等,更詳細的API文檔.

5. 小程序文件結構

小程序包含一個描述整體程序的 app多個描述各自頁面的 page

5.1 app文件結構
  • app.js:小程序邏輯
  • app.json:小程序的公共配置
  • app.wxss:小程序的公共樣式表
5.2 page文件結構
  • page.json:頁面配置
  • page.js:頁面邏輯
  • page.wxml:頁面結構
  • page.wxss:頁面樣式
    注意:為了方便開發者減少配置項,描述頁面的四個文件必須具有相同的路徑與文件名。

二. 微信小程序的能力

1. 小程序啟動

微信客戶端在打開小程序之前,會把整個小程序的代碼包下載到本地,緊接著通過 app.jsonpages 字段就可以知道你當前小程序的所有頁面路徑,而寫在 pages 字段的第一個頁面就是這個小程序的首頁(打開小程序看到的第一個頁面)

2. 小程序的頁面加載

微信客戶端會先根據 page.json 配置生成一個界面,頂部的顏色和文字你都可以在這個 json 文件里邊定義好。緊接著客戶端就會裝載這個頁面的 WXML 結構和 WXSS 樣式。最后客戶端會裝載 page.js。

3. 小程序的注冊

App() 函數用來注冊一個小程序。接受一個 object 參數,其指定小程序的生命周期函數(如下)等。此外開發者還可以添加任意的函數或數據到 Object 參數中,用this可以訪問。

  • onLaunch:生命周期函數--監聽小程序初始化,當小程序初始化完成時,會觸發 onLaunch(全局只觸發一次),函數參數
  • onShow:生命周期函數--監聽小程序顯示,當小程序啟動,或從后臺進入前臺顯示,會觸發 onShow,函數參數
  • onHide:生命周期函數--監聽小程序隱藏,當小程序從前臺進入后臺,會觸發 onHide
  • onError:錯誤監聽函數,當小程序發生腳本錯誤,或者 api 調用失敗時,會觸發 onError 并帶上錯誤信息
  • onPageNotFound:頁面不存在監聽函數,當小程序出現要打開的頁面不存在的情況,會帶上頁面信息回調該函數,函數參數

全局的getApp()函數可以用來獲取到小程序實例,但是需要注意:

  • 不要在定義于App()內的函數中調用getApp(),使用this就可以拿到app實例。
  • 通過getApp()獲取實例之后,不要私自調用生命周期函數。
4. 小程序頁面注冊

Page()函數用來注冊一個頁面。接受一個 object 參數,其指定頁面的初始數據、生命周期函數、事件處理函數等。

4.1 初始數據
  • data:頁面的初始數據
    初始化數據將作為頁面的第一次渲染。data 將會以 JSON 的形式由邏輯層傳至渲染層,所以其數據必須是可以轉成 JSON 的格式:字符串,數字,布爾值,對象,數組
Page({
  data: {
    text: 'init data',
    array: [{msg: '1'}, {msg: '2'}]
  }
})
4.2 生命周期
  • onLoad: 頁面加載,一個頁面只會調用一次,可以在 onLoad 中獲取打開當前頁面所調用的 query 參數。
  • onShow: 頁面顯示,每次打開頁面都會調用一次。
  • onReady: 頁面初次渲染完成,一個頁面只會調用一次,代表頁面已經準備妥當,可以和視圖層進行交互。對界面的設置如wx.setNavigationBarTitle請在onReady之后設置。
  • onHide: 頁面隱藏,當navigateTo或底部tab切換時調用。
  • onUnload: 頁面卸載,當redirectTonavigateBack的時候調用。
    page生命周期
4.3 頁面相關事件處理函數
  • onPullDownRefresh: 下拉刷新,監聽用戶下拉刷新事件,當處理完數據刷新后,wx.stopPullDownRefresh可以停止當前頁面的下拉刷新。
  • onReachBottom: 上拉觸底,監聽用戶上拉觸底事件,在觸發距離內滑動期間,本事件只會被觸發一次。
  • onPageScroll: 頁面滾動,監聽用戶滑動頁面事件,頁面在垂直距離上滾動的距離會包含在函數的對象參數的scrollTop字段中。
  • onShareAppMessage: 用戶轉發,只有定義了此事件處理函數,右上角菜單才會顯示“轉發”按鈕,用戶點擊轉發按鈕的時候會調用。

三. 微信小程序的頁面路由

框架以棧的形式維護了當前的所有頁面。 當發生路由切換的時候,頁面棧的表現如下:

路由方式 頁面棧表現
初始化 新頁面入棧
打開新頁面 新頁面入棧
頁面重定向 當前頁面出棧,新頁面入棧
頁面返回 頁面不斷出棧,直到目標返回頁
Tab 切換 頁面全部出棧,只留下新的 Tab 頁面
重加載 頁面全部出棧,只留下新的頁面

四. 微信小程序模塊化

可以將一些公共的代碼抽離成為一個單獨的 js 文件,作為一個模塊。模塊只有通過module.exports 或者 exports 才能對外暴露接口。(推薦使用module.exports暴露模塊接口),?在需要使用這些模塊的文件中,使用 require(path)將公共代碼引入(require 暫時不支持絕對路徑)。

// common.js
function sayHello(name) {
  console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
  console.log(`Goodbye ${name} !`)
}

module.exports.sayHello = sayHello
exports.sayGoodbye = sayGoodbye

// page.js
var common = require('common.js')
Page({
  helloMINA: function() {
    common.sayHello('MINA')
  },
  goodbyeMINA: function() {
    common.sayGoodbye('MINA')
  }
})
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容