本文作者:瀟湘待雨,來自原文地址 前段時間比較流行的微信小程序,因為一直沒有所謂內測碼也沒具體關注。拖到現在正好借組內分享的時機來仔細了解一下微信小程序。了解一個新的事物無外乎從是什么(本質),怎么用(具體用法),為什么用(優缺點)來學習,首先分析一下微信小程序是什么,聽起來比較高大上,說實話原來我確實挺疑惑,到底這一套是什么開發機制,native?hybrid?純h5?看網上各種教程上來就說api說語法,感覺不先理清楚是什么的問題就去搬api過來純粹是耍流氓。 一、微信小程序是什么: 言歸正傳,微信小程序的本質是什么?個人理解微信小程序本質還是一套前端框架,微信團隊基于原來第三方h5頁面在微信里只能通過h5實現原本可以由native實現的功能,例如上傳圖片等。進而采取的開放部分jsbridge的api來方便開發者。不過既然作為大廠肯定不會僅僅開放部分jsbridge的api就完了,順便微信類似vue、react一樣實現了一套自己的mvvm的框架就是目前的微信小程序。官方文檔這樣描述:框架提供了自己的視圖層描述語言 WXML 和 WXSS,以及基于 JavaScript 的邏輯層框架,并在視圖層與邏輯層間提供了數據傳輸和事件系統,可以讓開發者可以方便的聚焦于數據與邏輯上。 本質還是一套前端框架,代碼最終將會打包成一份 JavaScript并在小程序啟動的時候運行,直到小程序銷毀。模版語法類似vue,接近原生的自定義標簽。數據綁定和渲染類似vue的語法,不過是以wx:開頭(vue 以v: 作為標識) 事件系統類似react一樣定義了一套自己的事件系統。 二、微信運行環境:
微信小程序運行在三端:iOS、Android 和 用于調試的開發者工具
三、目錄結構: app.js代碼(代碼取自微信官方demo)和注釋說明如下:
1 //app.js 2 // 微信小程序就是調用微信開放jsbridge,來完成微信h5開發中某些原本比較難的功能的特定的微信前端框架 3 /** 4 * app 即小程序的生命周期管理。 5 * */ 6 App({ 7 // 初始化 8 onLaunch: function () { 9 //調用API從本地緩存中獲取數據 10 var logs = wx.getStorageSync('logs') || [] 11 logs.unshift(Date.now()) 12 wx.setStorageSync('logs', logs) 13 }, 14 // 全局方法或者變量,可在不同page中使用 15 getUserInfo:function(cb){ 16 var that = this 17 if(this.globalData.userInfo){ 18 typeof cb == "function" && cb(this.globalData.userInfo) 19 }else{ 20 //調用登錄接口 21 wx.login({ 22 success: function () { 23 wx.getUserInfo({ 24 success: function (res) { 25 that.globalData.userInfo = res.userInfo 26 typeof cb == "function" && cb(that.globalData.userInfo) 27 } 28 }) 29 } 30 }) 31 } 32 }, 33 globalData:{ 34 userInfo:null 35 } 36 }) app.json(文件中不允許有注釋)示例如下: 1 { 2 "pages":[ 3 "pages/index/index", 4 "pages/logs/logs", 5 "pages/swiper/swiper", 6 "pages/input/input", 7 "pages/form/form" 8 ], 9 "window":{ 10 "navigationBarBackgroundColor": "#ffffff", 11 "navigationBarTextStyle": "black", 12 "navigationBarTitleText": "微信小程序", 13 "backgroundColor": "#eeeeee", 14 "backgroundTextStyle": "light" 15 }, 16 "tabBar":{ 17 "borderStyle": "white", 18 "list": [{ 19 "pagePath": "pages/index/index", 20 "iconPath":"image/icon_API.png", 21 "selectedIconPath":"image/icon_API_HL.png", 22 "text": "首頁" 23 },{ 24 "pagePath": "pages/form/form", 25 "iconPath":"image/plus.png", 26 "selectedIconPath":"image/green_tri.png", 27 "text": "更多" 28 }, { 29 "pagePath": "pages/swiper/swiper", 30 "iconPath":"image/icon_COM.png", 31 "selectedIconPath":"image/icon_COM_HL.png", 32 "text": "其他" 33 } 34 ] 35 } 36 }
四、模版語言及事件系統 /** * 類似vue的條件渲染語法,熟悉vue的話應該不會陌生 **/ <view wx:if="{{condition}}"> </view>
2):事件系統 以bind或catch開頭,然后跟上事件的類型,如bindtap catchtouchstart, value 是一個字符串,需要在對應的 Page 中定義同名的函數。不然當觸發事件的時候會報錯。 bind事件綁定不會阻止冒泡事件向上冒泡,catch事件綁定可以阻止冒泡事件向上冒泡 。例如: /** *bind/catch +事件類型,兩種事件綁定方式 */ <view id="outter" bindtap="handleTap1"> outer view <view id="middle" catchtap="handleTap2"> middle view <view id="inner" bindtap="handleTap3"> inner view </view> </view> </view>
3):事件對象:包括BaseEvent 基礎事件對象,CustomEvent 自定義事件對象,TouchEvent 觸摸事件對象等。
五、優缺點:
2):缺點
3):其他問題 以上就是個人關于微信小程序的一些觀點和看法,拋磚引玉共同學習吧。詳情請移步github查看相關demo。 |