摘要:什么是小程序先引用小龍哥的一句話來看看啥是小程序小程序是一種不需要下載安裝即可使用的應用,它實現了應用觸手可及的夢想,用戶掃一掃或者搜一下即可打開應用。也體現了用完即走的理念,用戶不用關心是否安裝太多應用的問題。
什么是小程序?
先引用小龍哥的一句話來看看啥是小程序?
小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。也體現了“用完即走”的理念,用戶不用關心是否安裝太多應用的問題。應用將無處不在,隨時可用,但又無需安裝卸載。 - Allen Zhang(張小龍)
從程序猿的角度來說:小程序就是依賴于微信平臺,利用小程序框架提供視圖層描述語言WXML、WXSS,以及JavaScript來實現一個具備原生體驗的Web應用。微信小程序相當于基于微信平臺造了一個React Native的輪子,通過JS的跨平臺性實現了一套代碼跨平臺部署、運行。
Hello World 工程結構首先,我們先通過微信web開發者工具新建一個項目,項目建成后會自動生成下列文件。下文全部圍繞這個新建的項目來簡單的介紹一下小程序。
可以看出整個工程包括app.js、app.json、app.wxss,以及pages和utils目錄,后面我們一次介紹各個文件和目錄的作用。
其中app.js、app.json、app.wxss最為重要,他們為對整個小程序進行全局配置。
app.js,聲明小程序的整個生命周期、定義全局變量
app.json,對整個小程序起全局配置的作用,規定小程序包括哪些頁面、窗口的樣式、底部tab欄的樣式、網絡超時事件、是否開啟debug模式
app.wxss,這里的wxss類似于CSS,只不過是針對微信做了一部分拓展,定義了小程序的全局樣式
而pages目錄下面每一子目錄都代表了小程序中的一個頁面,而每一個頁面都由*.js、*.json、*.wxml、*.wxss組成,這里又出現了一個新的后綴wxml,同時再次出現了wxss,后面會解釋他倆是啥用的。先解釋一下,頁面中的這四種文件是干啥用的?
*.js,處理頁面的邏輯
*.json,處理頁面的配置
*.wxml,處理頁面的結構
*.wxss,處理頁面的樣式
為了減少配置同一個頁面目錄中的文件都需要以同一個名字命名,例如個人習慣將所有頁面目錄下面的文件都用index命名。
*.json中我可以配置什么?上面有提到app.json可以配置頁面的全局配置,而pages目錄下*.json則可以配置對應頁面window選項(窗口的樣式),那么我們到底可以配置哪些具體內容呢?
// app.json { // 定義小程序中有哪些頁面 "pages":[ "pages/index/index", "pages/logs/logs" ], // 窗口的樣式 "window":{ "backgroundTextStyle":"light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "Demo", "navigationBarTextStyle":"black", "enablePullDownRefresh": true }, // 底部tab的內容和樣式 "tabBar": { // tab的具體內容 "list": [ { "pagePath": "pages/index/index", "text": "首頁" }, { "pagePath": "pages/logs/logs", "text": "日志" } ] }, // 設置不同請求的網絡超時 "networkTimeout": { "request": 10000, "downloadFile": 10000 }, // 是否開啟debug模式,開啟debug模式之后可以在微信開發者工具的控制臺中看到整個APP,以及每個頁面的生命周期日志 "debug": true }
常用的配置都在這里了,根據配置的命名其實已經可以猜個大概啦,如果猜不出來可以參考文檔“配置”
什么是wxml?工程中出現了一個新的后綴*.wxml,而WXML(Weixin Markup Language)是微信小程序框架設計出來的一種標簽語言,你可以直接把他理解成是微信定義了一套帶有特殊事件、效果、屬性的標簽,但本質上和 小程序提供了兩種不同方式的引用import和include,二者的區別在于: import會引用目標文件中定義的 template include會將目標文件中除了template外的所有內容拷貝到include定義的位置 還需要注意的是import存在作用域的概念,即它只會引用目標文件中的template,不會引用目標文件中import的文件。 這里多帶帶說一下WXML中所提到的事件,小程序框架通過事件來保持視圖層和邏輯層的通訊,例如,用戶進行點擊行為,點擊行為觸發了點擊事件,進而觸發邏輯層中所綁定的函數。 和我們在瀏覽器中開發JS有區別的是,這里的事件分兩種:冒泡事件和非冒泡事件。其中冒泡事件包括touchstart、touchmove、touchcancel、touchend、tap、longtap,其余未提及的事件或者自定義事件均為非冒泡事件。 而在標簽綁定事件函數存在兩種方式bind*、catch*,其中bind*的事件綁定不會阻止冒泡事件向上冒泡,catch*則會阻止冒泡事件向上冒泡相當于直接在函數中執行e.stopPropagation()來阻止事件冒泡。 WXSS(WeiXin Style Sheets)是一套樣式語言,我們可以簡單理解成CSS的一個拓展,它增加了兩個特性: 尺寸單位 樣式導入 在WXSS中引入了一個新的單位rpx(responsive pixel),根據屏幕寬度的不同rpx代表的實際px也不同。WXSS規定一個屏幕的寬度為750rpx,750剛好是iphone6的物理寬度大小,也是目前大多數設計師出設計稿的標準寬度。也就是說當我們拿到設計稿的時候,我們不需要通過百分比、rem,而是直接測量出設計稿上的像素大小并使用微信提供的rpx就可以滿足多屏適配的問題。 除了rpx,WXSS還提供了目前大部分CSS預編譯語言所提供的是樣式導入,即將外聯樣式導入當當前文件中 我們可以通過App()來注冊一個小程序,并指定他的生命周期。 這里所謂的前臺、后臺引用文檔里面的話來說就是: 當用戶點擊左上角關閉,或者按了設備 Home 鍵離開微信,小程序并沒有直接銷毀,而是進入了后臺;當再次進入微信或再次打開小程序,又會從后臺進入前臺。 不難看出和APP所謂的前臺后臺很類似。 在這里我們還需要注意的一點就是場景值,場景值應該是微信所獨有的一個概念,即你通過什么的方式進入小程序,你可以是通過“發現欄小程序主入口”,也可以是通過“單人聊天窗口”等等途徑進入不同的方式都對應這個一個固定的值,這樣你就可以根據不同的場景值對用戶作區分、統計,亦或是功能上的區分,這些完全可以根據你的應用場景來決定。具體場景值可以參考文檔“場景值” 和注冊小程序相似,注冊頁面可以通過Page()去指定頁面的生命周期、事件函數以及初始化數據 上圖為頁面生命周期的一個描述,其中onLoad和onUnload對應代表了頁面的生命開始和結束,頁面的生命周期中onLoad、onUnload、onReady只會調用一次,onShow、onHide是可以多次調用的。 小程序中所有的頁面都由框架自身維護,而框架則以棧的形式去管理所有的頁面,下表為路由狀態、頁面的生命周期、頁面棧的表現三者的關系 當然,如果你覺得上面的表述比較麻煩,你也可以直接在微信開發者工具中看到當前頁面棧的變化情況。 框架也為我們提供了獲取頁面棧的方法,通過getCurrentPages()我們可以以數組的形式獲得當前頁面棧的實例,但是不要嘗試修改頁面棧,可能會出現莫名其妙的錯誤。 以項目中的utils/utils.js文件為例,它本身是一個普通工具類,采用了CommonJS的規范將自身特定的函數暴露給外部使用 在小程序中,基本上一個文件就是一個模塊,并通過module.exports或者exports將想要暴露的對象、函數暴露出去。 前面在說WXML的時候,又提到小程序框架為我們提供了大量功能、風格和微信相似的原生組件相仿的標簽,這些標簽就是我們開發中要使用到的組件,下面大致瀏覽介紹一下 除了這些功能豐富的組件外,微信還提供了豐富的微信API來調起微信 這里只做一個大概介紹,具體內容請參考文檔“組件”和“API” 在小程序中無法使用window、document,因為小程序運行在JsCore中,它里面是不包含window、document的 在小程序中無法使用jquery、zepto,因為jquery或zepto中使用了window或document background-image不能使用本地資源,只能使用網絡資源或者BASE64轉碼 小程序只能同時打開5個頁面,超過5個時,wx.navigateTo就不能正常打開了 博客地址: ssh.today,歡迎關注 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。 轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82905.html
事件
/** common.wxss **/
.small-p {
padding:5px;
}
/** app.wxss **/
@import "common.wxss";
.middle-p {
padding:15px;
}
App
App({
// 監聽小程序初始化,只會在小程序注冊時調用,其中返回值中包括了`path`小程序路徑、`query`打開小程序的query、`scene`場景值
onLaunch: function (options) {},
// 監聽小程序顯示,當小程序啟動或者從前臺進入后臺時會調用該方法
onShow: function(options) {},
// 監聽小程序隱藏,當小程序從前臺進入后臺時調用
onHide: function() {},
// 監聽小程序的錯誤,當小程序發生錯誤時觸發,類似`window.onerror`
onError: function() {},
// 全局對象
globalData: {}
});
// app本身是一個單例在一個程序中只有一個,所以在其它文件中如果想要使用APP對象需要通過下列方法調用
var appInstance = getApp();
Page({
// 初始化的頁面數據
data: {
text: "初始化數據"
},
// 頁面加載時觸發,這里的加載指的是第一次加載
onLoad: function(options) {},
// 頁面渲染完成時觸發
onReady: function() {},
// 頁面顯示時觸發,每次打開都會觸發
onShow: function() {},
// 頁面隱藏時觸發
onHide: function() {},
// 頁面卸載時觸發
onUnload: function() {},
// 用戶下拉時觸發
onPullDownRefresh: function() {},
// 用戶上拉觸底時觸發
onReachBottom: function() {},
// 點擊分享后觸發
onShareAppMessage: function () {},
// 事件綁定函數
viewTap: function() {
// 修改頁面數據
this.setData({
text: "啦啦啦啦啦"
})
},
// 自定義的對象
customData: {
hi: "MINA"
}
})
路由方式
觸發時機
頁面棧表現
路由前頁面
路由后頁面
初始化
在小程序中打開第一個頁面
新頁面入棧
-
onLoad,onShow
打開新頁面
調用wx.navigateTo或者使用navigator組件跳轉方式為navigateTo
新頁面入棧
onHide
onLoad,onShow
頁面重定向
調用wx.redirectTo或者使用navigator組件跳轉方式為redirectTo
當前頁面出棧,新頁面入棧
onUnload
onLoad,onShow
頁面返回
調用wx.navigateBack或者使用navigator組件跳轉類型為navigateBack或者按返回鍵
頁面不斷出棧,直到找到目標頁面
onUnload
onShow
Tab切換
調用wx.switchTab或者使用navigator組件跳轉類型為switchTab
頁面全部出棧,只留下訪問的tab頁
-
根據跳轉頁面的不同而不同
重加載
調用wx.reLaunch或者使用navigator組件跳轉類型為reLaunch
頁面全部出棧,只留下新的頁面
onUnload
onLoad,onShow
// utils/utils.js
function formatTime(date) {
var year = date.getFullYear()
var month = date.getMonth() + 1
var day = date.getDate()
var hour = date.getHours()
var minute = date.getMinutes()
var second = date.getSeconds()
return [year, month, day].map(formatNumber).join("/") + " " + [hour, minute, second].map(formatNumber).join(":")
}
function formatNumber(n) {
n = n.toString()
return n[1] ? n : "0" + n
}
module.exports = {
formatTime: formatTime
}
// logs/logs.js
// 通過require去引用utils.js
var util = require("../../utils/util.js")
摘要:注意如果我們不是用注冊時綁定的管理員微信號,在手機上體驗該小程序。微信小程序會讀取這些文件,并生成小程序實例。下面我們簡單了解這三個文件的功能,方便修改以及從頭開發自己的微信小程序。 獲取微信小程序的AppID首先,我們需要擁有一個帳號,如果你能看到該文檔,我們應當已經邀請并為你創建好一個帳號。注意不可直接使用服務號或訂閱號的AppID。 利用提供的帳號,登錄https://mp.we...
摘要:最佳實踐良好的編碼規范單元測試持續集成文檔,從一開始就形成良好的編碼習慣。真實的電商業務所有的業務需求來自真實的客戶,并且線上良好運營中。 重要通知: Laravel + 小程序的開源電商版本源碼已經在 github 上拉,歡迎提交 issue 和 star :) 開源電商 Server 端: Laravel API源碼 開源電商 client 端:小程序源碼 iBrand 簡介...
摘要:接下來,在支付寶小程序開發者工具中打,不出意外能跑起來一個電商支付寶小程序雛形。地址以上是我這個攻城獅對使用轉換原生微信小程序為支付寶小程序的一次微不足道的實踐。 showImg(https://segmentfault.com/img/bVbnCCN?w=1818&h=931);↑開局一張圖,故事全靠編↑ 從一個需求說起 作為底層的程序猿,哦不,我連猿都算不上,混的好的叫碼神,混得一...
摘要:行勝于言,理論結合實踐才是王道,所以本文我將基于前面的學習方法,分享我是如何學習微信小程序的。第二個目標則需要學習小程序的插件相關接口調用,以及蟬知建站系統這邊的微信模塊代碼。 前段時間和大家一起分享了一篇關于學習方法內容《大牛與搬運工的差距——學習方法的力量》。我們將學習過程分成八步,并借鑒了敏捷開發的迭代思想,以達到自我迭代學習的效果。行勝于言,理論結合實踐才是王道,所以本文我將基...
摘要:第一步搭開發環境首先,我們需要在本地搭建好微信小程序的開發環境。在微信小程序中,所有的網絡請求受到嚴格限制,不滿足條件的域名和協議無法請求。第五步配置微信小程序云端示例鏡像中,已經部署好了,但是還需要在下修改配置中的域名證書私鑰。 「小程序」這個劃時代的產品發布快一周了,互聯網技術人都在摩拳擦掌,躍躍欲試。可是小程序目前還在內測,首批只發放了 200 個內測資格(淚流滿面)。本以為沒有...
閱讀 2014·2021-11-15 11:38
閱讀 2048·2019-08-30 15:55
閱讀 2182·2019-08-30 15:52
閱讀 3167·2019-08-30 14:01
閱讀 2684·2019-08-30 12:47
閱讀 1128·2019-08-29 13:17
閱讀 1062·2019-08-26 13:55
閱讀 2629·2019-08-26 13:46