微信小程序開發基礎知識總結

微信小程序在無論在功能、文檔及相關支持方面,都是優于前面幾種微信賬號類型,它提供了很多原生程序才有的接口,使得我們的小程序在很多方面突破H5頁面應用的限制,更加接近原生程序的功能,因此微信小程序具有很大的前景想象力。它提供了自己的視圖層描述語言 WXML 和 WXSS,以及基于 JavaScript 的邏輯層框架,并在視圖層與邏輯層間提供了數據傳輸和事件系統,可以讓開發者可以方便的聚焦于數據與邏輯上。

1、小程序的目錄結構

小程序的目錄結構如下所示。



其中項目級別的的文件包括 app.js、app.json、app.wxss 這三個。其中.js
后綴的是腳本文件,.json
后綴的文件是配置文件,.wxss
后綴的是樣式表文件。
頁面級別可以包含很多個頁面,如index,detail等頁面,每個頁面都包含.js,.json,.wxml,.wxss這些文件,其中.wxml為頁面視圖文件,是自定義標簽的HTML頁面。
app.js是小程序的腳本代碼。我們可以在這個文件中監聽并處理小程序的生命周期函數、聲明全局變量,可以調用框架提供的豐富的 API。
app.json 是對整個小程序的全局配置。我們可以在這個文件中配置小程序是由哪些頁面組成,配置小程序的窗口?背景色,配置導航條樣式,配置默認標題。
app.wxss 是整個小程序的公共樣式表。我們可以在頁面組件的 class 屬性上直接使用 app.wxss 中聲明的樣式規則。
一個小程序主體部分由三個文件組成,必須放在項目的根目錄。


微信小程序中的每一個頁面的【路徑+頁面名】都需要寫在 app.json 的 pages 中,且 pages 中的第一個頁面是小程序的首頁。
每一個小程序頁面是由同路徑下同名的四個不同后綴文件的組成,如:index.js、index.wxml、index.wxss、index.json。.js
后綴的文件是腳本文件,.json
后綴的文件是配置文件,.wxss
后綴的是樣式表文件,.wxml
后綴的文件是頁面結構文件。
index.json 是頁面的配置文件:頁面的配置文件是非必要的。當有頁面的配置文件時,配置項在該頁面會覆蓋 app.json 的 window 中相同的配置項。如果沒有指定的頁面配置文件,則在該頁面直接使用 app.json 中的默認配置。


邏輯層(App Service)
小程序開發框架的邏輯層是由JavaScript編寫。
邏輯層將數據進行處理后發送給視圖層,同時接受視圖層的事件反饋。 在 JavaScript 的基礎上,我們做了一些修改,以方便地開發小程序。
增加 AppPage 方法,進行程序和頁面的注冊。
增加 getApp 和 getCurrentPages 方法,分別用來獲取 App 實例和當前頁面棧。
提供豐富的 API,如微信用戶數據,掃一掃,支付等微信特有能力。
每個頁面有獨立的作用域,并提供模塊化能力。
由于框架并非運行在瀏覽器中,所以 JavaScript 在 web 中一些能力都無法使用,如 document,window 等。
開發者寫的所有代碼最終將會打包成一份 JavaScript,并在小程序啟動的時候運行,直到小程序銷毀。類似 ServiceWorker,所以邏輯層也稱之為 App Service。

視圖層
框架的視圖層由 WXML 與 WXSS 編寫,由組件來進行展示。
將邏輯層的數據反應成視圖,同時將視圖層的事件發送給邏輯層。
WXML(WeiXin Markup language)用于描述頁面的結構。
WXSS(WeiXin Style Sheet)用于描述頁面的樣式。
組件(Component)是視圖的基本組成單元。

基礎組件
框架為開發者提供了一系列基礎組件,開發者可以通過組合這些基礎組件進行快速開發。
什么是組件:
組件是視圖層的基本組成單元。
組件自帶一些功能與微信風格的樣式。
一個組件通常包括開始標簽
和結束標簽
,屬性
用來修飾這個組件,內容
在兩個標簽之內。

<tagname property="value">
  Content goes here ...
</tagename>

注意:所有組件與屬性都是小寫,以連字符-連接

API

框架提供豐富的微信原生API,可以方便的調起微信提供的能力,如獲取用戶信息,本地存儲,支付功能等。

說明:

wx.on 開頭的 API 是監聽某個事件發生的API接口,接受一個 CALLBACK 函數作為參數。當該事件觸發時,會調用 CALLBACK 函數。
如未特殊約定,其他 API 接口都接受一個OBJECT作為參數。
OBJECT中可以指定success, fail, complete來接收接口調用結果。
參數名 類型 必填 說明
success Function 否 接口調用成功的回調函數
fail Function 否 接口調用失敗的回調函數
complete Function 否 接口調用結束的回調函數(調用成功、失敗都會執行)

2、小程序接口功能列表

框架提供豐富的微信原生API,可以方便的調起微信提供的能力,如獲取用戶信息,本地存儲,支付功能等。

1)網絡 API 列表:
wx.request 發起網絡請求
wx.uploadFile 上傳文件
wx.downloadFile 下載文件
wx.connectSocket 創建 WebSocket 連接
wx.onSocketOpen 監聽 WebSocket 打開
wx.onSocketError 監聽 WebSocket 錯誤
wx.sendSocketMessage 發送 WebSocket 消息
wx.onSocketMessage 接受 WebSocket 消息
wx.closeSocket 關閉 WebSocket 連接
wx.onSocketClose 監聽 WebSocket 關閉

2)媒體 API 列表:
wx.chooseImage 從相冊選擇圖片,或者拍照
wx.previewImage 預覽圖片
wx.startRecord 開始錄音
wx.stopRecord 結束錄音
wx.playVoice 播放語音
wx.pauseVoice 暫停播放語音
wx.stopVoice 結束播放語音
wx.getBackgroundAudioPlayerState 獲取音樂播放狀態
wx.playBackgroundAudio 播放音樂
wx.pauseBackgroundAudio 暫停播放音樂
wx.seekBackgroundAudio 控制音樂播放進度
wx.stopBackgroundAudio 停止播放音樂
wx.onBackgroundAudioPlay 監聽音樂開始播放
wx.onBackgroundAudioPause 監聽音樂暫停
wx.onBackgroundAudioStop 監聽音樂結束
wx.chooseVideo 從相冊選擇視頻,或者拍攝

3)文件 API 列表:
wx.saveFile 保存文件
wx.getSavedFileList 獲取已保存的文件列表
wx.getSavedFileInfo 獲取已保存的文件信息
wx.removeSavedFile 刪除已保存的文件信息
wx.openDocument 打開文件

4)數據 API 列表:
wx.getStorage 獲取本地數據緩存
wx.getStorageSync 獲取本地數據緩存
wx.setStorage 設置本地數據緩存
wx.setStorageSync 設置本地數據緩存
wx.getStorageInfo 獲取本地緩存的相關信息
wx.getStorageInfoSync 獲取本地緩存的相關信息
wx.removeStorage 刪除本地緩存內容
wx.removeStorageSync 刪除本地緩存內容
wx.clearStorage 清理本地數據緩存
wx.clearStorageSync 清理本地數據緩存

5)位置 API 列表:
wx.getLocation 獲取當前位置
wx.chooseLocation 打開地圖選擇位置
wx.openLocation 打開內置地圖
wx.createMapContext 地圖組件控制

6)設備 API 列表:
wx.getNetworkType 獲取網絡類型
wx.onNetworkStatusChange 監聽網絡狀態變化
wx.getSystemInfo 獲取系統信息
wx.getSystemInfoSync 獲取系統信息
wx.onAccelerometerChange 監聽加速度數據
wx.startAccelerometer 開始監聽加速度數據
wx.stopAccelerometer 停止監聽加速度數據
wx.onCompassChange 監聽羅盤數據
wx.startCompass 開始監聽羅盤數據
wx.stopCompass 停止監聽羅盤數據
wx.setClipboardData 設置剪貼板內容
wx.getClipboardData 獲取剪貼板內容
wx.makePhoneCall 撥打電話
wx.scanCode 掃碼

7)界面 API 列表:
wx.showToast 顯示提示框
wx.showLoading 顯示加載提示框
wx.hideToast 隱藏提示框
wx.hideLoading 隱藏提示框
wx.showModal 顯示模態彈窗
wx.showActionSheet 顯示菜單列表
wx.setNavigationBarTitle 設置當前頁面標題
wx.showNavigationBarLoading 顯示導航條加載動畫
wx.hideNavigationBarLoading 隱藏導航條加載動畫
wx.navigateTo 新窗口打開頁面
wx.redirectTo 原窗口打開頁面
wx.switchTab 切換到 tabbar 頁面
wx.navigateBack 退回上一個頁面
wx.createAnimation 動畫
wx.createContext 創建繪圖上下文
wx.drawCanvas 繪圖
wx.stopPullDownRefresh 停止下拉刷新動畫

8)WXML節點信息 API 列表:
wx.createSelectorQuery 創建查詢請求
selectorQuery.select 根據選擇器選擇單個節點
selectorQuery.selectAll 根據選擇器選擇全部節點
selectorQuery.selectViewport 選擇顯示區域
nodesRef.boundingClientRect 獲取布局位置和尺寸
nodesRef.scrollOffset 獲取滾動位置
nodesRef.fields 獲取任意字段
selectorQuery.exec 執行查詢請求

9)開放接口:
wx.login 登錄
wx.getUserInfo 獲取用戶信息
wx.chooseAddress 獲取用戶收貨地址
wx.requestPayment 發起微信支付
wx.addCard 添加卡券
wx.openCard 打開卡券

3、相關處理代碼

1)注冊程序處理代碼

App({
  onLaunch: function(options) {
    // Do something initial when launch.
  },
  onShow: function(options) {
      // Do something when show.
  },
  onHide: function() {
      // Do something when hide.
  },
  onError: function(msg) {
    console.log(msg)
  },
  globalData: 'I am global data'
})

2)注冊頁面處理代碼

//index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // Do some initialize when page load.
  },
  onReady: function() {
    // Do something when page ready.
  },
  onShow: function() {
    // Do something when page show.
  },
  onHide: function() {
    // Do something when page hide.
  },
  onUnload: function() {
    // Do something when page close.
  },
  onPullDownRefresh: function() {
    // Do something when pull down.
  },
  onReachBottom: function() {
    // Do something when page reach bottom.
  },
  onShareAppMessage: function () {
   // return custom share data when user share.
  },
  onPageScroll: function() {
    // Do something when page scroll
  },
  // Event handler.
  viewTap: function() {
    this.setData({
      text: 'Set some data for updating view.'
    })
  },
  customData: {
    hi: 'MINA'
  }
})

3)JS函數模塊化

// 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) 將公共代碼引入

var common = require('common.js')
Page({
  helloMINA: function() {
    common.sayHello('MINA')
  },
  goodbyeMINA: function() {
    common.sayGoodbye('MINA')
  }
})

4)網絡數據請求處理代碼

//點擊搜索按鈕調用的函數
  search:function(e){
    var that = this;

    //數據加載完成之前,顯示加載中提示框
    wx.showToast({
      title: '加載中。。。',
      icon: 'loading',
      duration: 10000
    });

    //發起請求,注意 wx.request發起的是 HTTPS 請求
    wx.request({
      url: url + "?city=" + that.data.inputValue + "&key=" + apiKey,
      data: {},
      header: {
          'content-type': 'application/json'
      },
      success: function(res) {
        var data = res.data;
        //將數據從邏輯層發送到視圖層,同時改變對應的 this.data 的值
        that.setData({
          restation: data.result,
          condition: false
        });
        //數據加載成功后隱藏加載中彈框
        wx.hideToast();
      }
    })

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

推薦閱讀更多精彩內容

  • 微信小程序在無論在功能、文檔及相關支持方面,都是優于前面幾種微信賬號類型,它提供了很多原生程序才有的接口,使得我們...
    未央大佬閱讀 2,315評論 0 12
  • 1.小程序起步 (1)點擊https://mp.weixin.qq.com/wxopen/waregister?a...
    GXW_Lyon閱讀 3,404評論 0 0
  • 因新工作主要負責微信小程序這一塊,最近的重心就移到這一塊,該博客是對微信小程序整體的整理歸納以及標明一些細節點,初...
    majun00閱讀 7,378評論 0 9
  • 最近做了一個投票的微信小程序,開發過程主要還是參考官方文檔:https://mp.weixin.qq.com/de...
    june5253閱讀 22,040評論 1 11
  • 今天我們上了泰山,在上山之前,我們了解到原來泰山有兩個門,一個是紅門,一個是天外村。 據我所知,紅門是憑借自己的力...
    博的天空閱讀 374評論 0 0