微信小程序開發流程與核心概念 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

微信小程序開發流程與核心概念

發表時間:2021-2-20

發布人:葵宇科技

浏覽次數:69

一.小程序開發賬号申請(AppID)

  1. 登陸微信公衆平台 mp.weixin.qq.com
  2. 點擊立即注冊:填寫賬号信息->激活賬号(郵箱激活)->信息登記(選擇主體類型)
  3. 安裝開發者工具:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html

二.小程序開發起步:

  1. 閱讀小程序開發指南: developers.weixin.qq.com/miniprogram…
  2. 小程序框架模版部署: ( mpVue框架文(wén)檔:http://mpvue.com )
// 全局安裝 vue-cli
$ npm install --global vue-cli

// 創建一個(gè)基于 mpvue-quickstart 模闆的新項目
$ vue init mpvue/mpvue-quickstart my-project  
 
// 安裝依賴 
$ cd my-project
$ npm install

// 啟動(dòng)構建
$ npm run dev
複制代碼
  1. 啟動(dòng)微信開發者工具,引入項目目錄dist中(zhōng)的wx文(wén)件夾即可(kě)預覽到簡單的 mpvue 小程序。

三.小程序的版本區分:

  1. 開發版本:使用開發者工具,運行代碼後點擊上傳可(kě)以将代碼上傳到開發者版本中(zhōng)。
  2. 體驗版本:
    • 可(kě)以選擇某個(gè)開發版本作為體驗版本,一個(gè)AppID同一時刻有且隻有一個(gè)體驗版二維碼。
    • 體驗者微信号需使用小程序開發賬号登陸微信公衆平台中(zhōng),添加到體驗成員。
  3. 審核中(zhōng)版本:
    • 隻有在完成小程序基本資(zī)料填寫後,方可(kě)選擇一個(gè)開發版本提交審核。
    • 隻能有一份代碼處于審核中(zhōng),有審核結果以後可(kě)以發布到線上。
    • 請開發者嚴格測試了版本之後,再提交審核, 過多的審核不通(tōng)過,可(kě)能會影響後續的時間。
  4. 線上版本:線上所有用戶使用的代碼版本,該版本代碼在新版本代碼發布後被覆蓋更新。

四. 小程序發布上線準備工作(審核版本-上線版本)

  1. 檢查微信開發賬号:
    • 确保需要上線的AppID正确(在project.config.json文(wén)件中(zhōng)修改)
    • 确保上線的AppID通(tōng)過微信認證完成了主體真實性确認
  2. 檢查項目環境配置:确保項目環境切換為'production'  (在src/biz/apiConfig.js文(wén)件中(zhōng)修改)
  3. 檢查生産環境域名配置:(開發-集成-驗收  同下(xià)一緻)
    • 确保在小程序公衆平台上配置服務器(qì)選項中(zhōng)成功添加生産環境的服務器(qì)域名和(hé)業(yè)務域名
    • 業(yè)務域名需經過ICP備案,新備案域名需24小時後才可(kě)配置。域名格式隻支持英文(wén)大小寫字母、數字及“- ”,不支持IP地址。配置業(yè)務域名後,可(kě)打開任意合法的子(zǐ)域名。
    • 下(xià)載校(xiào)驗文(wén)件并将文(wén)件放置在域名根目錄下(xià),例如(rú)wx.qq.com,并确保可(kě)以訪問(wèn)該文(wén)件。
  4. 填寫小程序信息:微信公衆平台上未填寫小程序信息内容是無法發布審核版本:
    • 小程序名稱:(長度為4-30個(gè)字符,一個(gè)中(zhōng)文(wén)字等于2個(gè)字符)
    • 小程序簡稱 :(選填:長度為4-10個(gè)字符,一個(gè)中(zhōng)文(wén)字等于2個(gè)字符)
    • 涉及特定行業(yè)領域小程序名稱需提供:(各項圖片大小小于5M)《營業(yè)執照》或《組織代碼證》,請務必加蓋公司公章《商(shāng)标注冊證》等相關(guān)行業(yè)法定許可(kě)或備案證明文(wén)件、相關(guān)職業(yè)或執業(yè)證件
    • 小程序頭像:(格式:png,bmp,jpeg,jpg,gif;不可(kě)大于2M,建議圖片尺寸為144px*144px)
    • 小程序介紹: 介紹字數為4~120個(gè)字
    • 小程序的服務類目:選擇對應的服務類目。例如(rú):金融業(yè)下(xià)的信托服務。需提供:《金融許可(kě)證》或 《金融機構許可(kě)證》(上傳原件或複印件,複印件務必加蓋公司公章)

五. 小程序開發的核心概念

  1. 小程序的生命周期過程總結

    • 應用的生命周期:
      • onLaunch : 當小程序初始化完成時,會觸發(全局隻觸發一次)
      • onShow : 當小程序啟動(dòng),或從後台進入前台顯示時觸發
      • onHide : 當小程序從前台進入後台時觸發(右上角的關(guān)閉、按手機設備的Home鍵)
      • onError : 當小程序發生腳本錯誤,或者 API 調用失敗時觸發
    • 頁面的生命周期:
      • onLoad : 監聽頁面加載,觸發時機早于onShow和(hé)onReady(在頁面沒被銷毀之前隻會觸發1次)
      • onShow : 監聽頁面顯示,觸發事件早于onReady
      • onReady : 監聽頁面初次渲染完成(觸發時表示頁面可(kě)交互,在頁面沒被銷毀之前隻會觸發1次)
      • onHide : 監聽頁面隐藏(wx.navigateTo切換到其他頁面、底部tab切換時觸發)
      • onUnload : 監聽頁面卸載(wx.redirectTo或wx.navigateBack返回到其他頁時觸發)
  2. 頁面跳轉和(hé)路(lù)由

微信小程序采用頁面棧的形式來管理頁面,小程序宿主環境限制了這個(gè)頁面棧的最大層級為10層。現在頁面棧數據為 [pageA,pageB,pageC],pageC在最頂上,也就是用戶看到的界面。

* wx.navigateTo({url:'pageD'}) 推出一個(gè)pageD,此時頁面棧[pageA, pageB, pageC, pageD]
* wx.navigateBack() 退出當前頁面棧的最頂上頁面,此時頁面棧變成 [ pageA, pageB, pageC ]
* wx.redirectTo({ url:'pageE'}) 替換當前頁變成pageE,此時頁面棧變成 [ pageA, pageB, pageE ]
* wx.switchTab({ url:'pageF'}) 切換到tab頁面pageF,此時原來頁面棧被清空 [ pageF ] 
* wx.reLaunch({ url:'pageH'}) 重啟小程序并打開pageH,此時頁面棧為 [ pageH ]。
複制代碼
  1. 頁面路(lù)由觸發方式及頁面生命周期函數的對應關(guān)系:
路(lù)由方式觸發時機路(lù)由前頁面生命周期路(lù)由後頁面生命周期
初始化小程序打開的第一個(gè)頁面onLoad, onShow
打開新頁面 調用API wx.navigateToonHideonLoad, onShow
頁面重定向 調用API wx.redirectToonUnloadonLoad, onShow
頁面返回 調用API wx.navigateBackonUnloadonShow
Tab切換 調用 API wx.switchTab具體情況具體分析具體情況具體分析
重啟動(dòng)調用 API wx.reLaunchonUnloadonLoad, onShow

六. 小程序開發的踩坑收錄

  1. iOS 屏幕寬度适配問(wèn)題

塊級元素的标簽,用100%來代替需要完全寬度750rpx的頁面效果(使用 absolute 和(hé) fixed 的标簽除外),如(rú)果同時設置了标簽的 padding 或 border,需更改 box-sizing 屬性值為border-box;

  1. iOS 中(zhōng)Date 不支持構造 YYYY-MM-dd 的數據格式 可(kě)替換成 YYYY/MM/dd

  2. 小程序頁面未觸發onUnload之前頁面狀态不會銷毀

由于頁面的生命周期onLoad在被銷毀之前隻會觸發1次,因此頁面中(zhōng)data()返回的數據在 onShow()、onHide()生命周期觸發時,不會主動(dòng)去做數據初始化。需要手動(dòng)重制數據狀态,或者在離(lí)開頁面時使用wx.redirectTo來跳轉頁面達到觸發onUnload()行為。

  1. 小程序 textarea、input 層級過高,導緻填寫内容穿透

原生組件的層級是最高的,所以頁面中(zhōng)的其他組件無論設置 z-index 為多少(shǎo),都無法覆蓋在原生組件上。解決的辦法就是當textarea輸入完成時,将textarea隐藏,将輸入内容顯示在一個(gè)text文(wén)本框。當點擊text輸入框時,又将text隐藏,顯示textarea,并将textarea的焦點選中(zhōng)繼續輸入内容。

  1. 小程序原聲組件button無法去除默認的border樣式

使用 button::after{ border:none } 就可(kě)以去除默認border。

  1. 小程序中(zhōng)不支持 ::placeholder 選擇器(qì)

在input标簽中(zhōng)加入 placeholder-class="place-holder" 然後定義這個(gè)類的.place-holder{ color:red; }

  1. 如(rú)何獲取小程序在頁面傳遞的參數

在所有頁面的組件内可(kě)以通(tōng)過 this.root.root.mp.query 進行獲取。

  1. 小程序 web-view 組件無法實現在Android上直接預覽pdf文(wén)件

由于Android 和(hé) ios 在web-view組件上的差異,解決方式是:使用wx.getSystemInfo()獲取設備信息,ios系統直接使用web-view進行預覽pdf文(wén)件;Android系統通(tōng)過wx.downloadFile()下(xià)載文(wén)件、wx.openDocument()打開文(wén)件的操作模拟文(wén)件預覽的效果。(以下(xià)代碼已經對部分小程序API 進行promise化)

//首先在 utils.js 進行小程序API promise化
function wxPromisify(functionName, params) {
  return new Promise((resolve, reject) => {
    wx[functionName]({
      ...params,
      success: res => resolve(res),
      fail: res => reject(res)
    });
  });
}
function getSystemInfo(params={})//獲取系統信息
  return wxPromisify('getSystemInfo',params);
}
function downloadFile(params={})//下(xià)載文(wén)件
  return wxPromisify('downloadFile',params);
}
function openDocument(params={})//打開文(wén)件
  return wxPromisify('openDocument',params);
}

//小程序預覽文(wén)件全兼容方法

showDocHandle(){
  let docId = this.uuid;
  let resultUrl = `${apiConfig.request.getPubFile}/${this.xxxPubUrl}`
  wx.showLoading({title: '正在識别設備!'})
  utils.getSystemInfo()
    .then(res => {
      if(res.system.indexOf('iOS') != -1){
        wx.hideLoading();
        this.show = true;
        this.resultUrl = resultUrl;
      }else{
        this.show = false;
        wx.showLoading({title: '正在緩存文(wén)件!'});
        return utils.downloadFile({url: resultUrl});
      }
    })
    .then(res => {
      let tempFilePath = res.tempFilePath;
      wx.hideLoading();
      wx.showLoading({title: '正在打開文(wén)件!'})
      return utils.openDocument({filePath: tempFilePath})
    })
    .catch(err => {
      wx.hideLoading();
      utils.showToast("緩存文(wén)件失敗!")
    })
    .then(res => {
      wx.hideLoading()
      utils.showToast("文(wén)件打開成功!")
    })
    .catch(err => {
      wx.hideLoading();
      utils.showToast("打開文(wén)件失敗!")
      wx.navigateBack({delta:1})
    })
}

相關(guān)案例查看更多