小程序最近太火,不過相比較剛發布時,已經有點熱度散去的感覺,不過這不影響我們對小程序的熱情,開發之前建議通讀下官網文檔,附鏈接:
大家好,我是架構君,一個會寫代碼吟詩的架構師。今天說一說微信小程序初體驗[通俗易懂],希望能夠幫助大家進步!!!
小程序最近太火,不過相比較剛發布時,已經有點熱度散去的感覺,不過這不影響我們對小程序的熱情,開發之前建議通讀下官網文檔,附鏈接:
接下來,我們要實現的小程序效果如下,源碼地址::
1、注冊
打開微信公眾平臺,單擊“小程序”,按步驟開始注冊即可,附地址:
這里要注意的就是,小程序目前個人開發者無法單獨注冊,需要進行企業等資格認證,不過認證那里我們隨意填寫,認證通不通過并不影響我們開發,只是不能正式發布而已。
2、初始化項目
注冊成功后,進入后臺,有個appid、密鑰,這兩個添加到這里,最后點擊確定即可:
3、項目結構
來看下wx自動生成的項目結構:
其中,pages用來放小程序中的各個頁面,這些頁面必須在app.json文件的pages參數中進行配置,是我們自定義的用來存放靜態文件的目錄,比如一些image、style等,utils是工具文件夾,放置一些公共類方法,比如請求封裝、時間處理等,下面來主要介紹一下幾個文件:
//app.js const utils = require('./utils/util.js') App({ onLaunch: function () { }, getUserInfo(cb) { var that = this if(this.globalData.userInfo){ typeof cb == "function" && cb(this.globalData.userInfo) }else{ //調用登錄接口 wx.login({ success: function () { wx.getUserInfo({ success: function (res) { that.globalData.userInfo = res.userInfo typeof cb == "function" && cb(that.globalData.userInfo) }}) } }) } }, getNewsInfo(typeId) { var that = this; return new utils.Promise((resolve, reject) => { if (that.globalData.newsInfo && that.globalData.newsInfo["" + typeId]) { resolve(that.globalData.newsInfo["" + typeId]) } return utils.get({ "type": typeId }).then(res => { if (!that.globalData.newsInfo) that.globalData.newsInfo = {}; that.globalData.newsInfo["" + typeId] = res.result.data; resolve(res.result.data); }) }); }, globalData: { newsInfo: null, userInfo: null } })
只聽到從架構師辦公室傳來架構君的聲音:
度金針、漫牽方寸。有誰來對上聯或下聯?
此代碼由Java架構師必看網-架構君整理
{ "pages": [ "pages/hot/index", "pages/my/index", "pages/my/feedback/index", "pages/my/information/index", "pages/dynamic/index", "pages/dynamic/detail" ], "window": { "backgroundTextStyle":"light", "navigationBarBackgroundColor": "#4BC1D2", "navigationBarTitleText": "業務GO", "navigationBarTextStyle": "white"}, "tabBar": { "color": "#353535", "selectedColor": "#4BC1D2", "borderStyle": "black", "backgroundColor": "#FFF", "list": [ { "pagePath": "pages/hot/index", "text": "熱點", "iconPath": "static/images/icon@hot.png", "selectedIconPath": "static/images/icon@hot-hover.png" }, { "pagePath": "pages/circle/index", "text": "圈子", "iconPath": "static/images/icon@coterie.png", "selectedIconPath": "static/images/icon@coterie-hover.png" }, { "pagePath": "pages/tool/index", "text": "工具", "iconPath": "static/images/icon@tool.png", "selectedIconPath": "static/images/icon@tool-hover.png" }, { "pagePath": "pages/my/index", "text": "我的", "iconPath": "static/images/icon@my.png", "selectedIconPath": "static/images/icon@my-hover.png" } ] }, "networkTimeout": { "request": 60000, "downloadFile": 60000 } }
4、關于wx.請求
小程序下面暫不支持es6語法,但是我們可以使用一些工具函數實現調用,比如可以自己封裝版本的請求如下:
const DOMAIN = 'https://v.juhe.cn/toutiao/index'; const KEY = 'c419699e576519892ebf87bbd3c8158c'; // 小程序上線需要https function request(method, data = {}) { data.key = KEY; // wx.showNavigationBarLoading() wx.showToast({ title: '加載中', icon: 'loading', duration: 10000 }) return new Promise((resolve, reject) => { wx.request({ url: DOMAIN, method: method, data: data, header: { 'content-type': 'application/json' }, method: method.toUpperCase(), // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT success: function (res) { // wx.hideNavigationBarLoading() wx.hideToast(); resolve(res.data) }, fail: function (msg) { console.log('reqest error', msg) // wx.hideNavigationBarLoading() wx.hideToast(); reject('fail') } }) }) }
然后導出即可外部使用:
此代碼由Java架構師必看網-架構君整理
module.exports = { categories, Promise, get: requestGet, post: requestPost, request,showLoading,requestDynamic }
這里我們可以為每次請求添加“加載中”效果,很簡單在每次請求前面添加如下代碼:
wx.showToast({ title: '加載中', icon: 'loading', duration: 10000 })
請求結束后再次隱藏toast即可:
wx.hideToast();
5、關于免費api調用
小程序開發時我們難免會進行服務調用,首先必須在這里設置請求的域名地址(wx規定域名必須是https的才行):
當然,免費的api還是有很多,不過大多數都是要進行認證的,不認證的話使用會有部分限制,不過短期不影響。
6、關于項目上傳、審核
項目上傳需要使用wx的開發工具:
掃碼上傳之后在這里我們就能看到上傳的版本信息:
當然微信小程序顯示外鏈,上傳之后是“開發版”,可以直接在此基礎上進行提交審核或者選為體驗版,體驗版的話管理員賬戶可以自行指定體驗者的微信賬號,這樣的話,即使小程序不發布,體驗者也可以和開發者一樣掃碼預覽項目效果,體驗者的設置在這里進行:
7、關于數據渲染及頁面傳參
首先是數據渲染,每個頁面的數據來源是page對象下的data屬性,然后在頁面里通過雙大括號的方式進行數據渲染,了解模板引擎的一看就知道了,覺得小程序這種做法類似于一些mvvm框架,數據層修改數據會直接同步到視圖層。當然渲染時支持條件判斷、循環處理等,這些基本的功能沒有少。
其次是頁面跳轉及傳參,這里主要有2種方式,分別介紹如下:
一是使用組件,該組件里面可包含一系列的view組件,組件必須指定url屬性,代表單擊跳轉地址(微信小程序不支持外鏈跳轉,有點失望),使用如下:
這里即為某頁面名稱,參數傳遞類似get請求時參數拼接傳遞的方式,當然在js中進行數據獲取也比較簡單:
onLoad:function(options){ data_id = options.id; //頁面初始化 options為頁面跳轉所帶來的參數 this.refreshNewData(); }
事件默認有個參數,該參數組件傳過來的參數,然后進行處理即可。
二是頁面跳轉,小程序支持如下4種導航跳轉:
參數傳遞的話直接寫在其url屬性上,類似如下:
wx.navigateTo({ url: 'test?id=1'})
8、關于事件處理及分類
小程序中的事件總得分為2種,一種是冒泡、一種是非冒泡事件,使用bind開頭綁定的事件為冒泡事件,意思是說如果同一個事件名稱,上下兩個頁面層組件均綁定了該事件的話,那么底下組件的事件處理會先執行,然后再繼續執行上層組件的相應代碼;使用catch開頭綁定的事件不冒泡,事件只會被處理一次。然后是事件對象,事件處理到達page下的js后,會默認傳一個event對象,該對象類似如下:
比如如下代碼:
{{ item.name }}
?
我們使用了事件處理view單擊,參數傳遞使用data-xxx='yyyy'的形式,其中xxx為key,相應的yyyy為傳入的參數值,在事件處理中我們可以這樣獲取參數:
changeCategory: function (ev) { var that = this; var id = ev.currentTarget.dataset.id; this.setData({ currentTopItem: ev.currentTarget.dataset.index }); }
通過ev事件對象的..xxx的形式獲取xxx參數值即可微信小程序顯示外鏈,順便說下,頁面的參數設置一般使用方法進行,而的設置可以直接通過().=xxx的形式即可。
9、關于模板使用
小程序提供模板功能,個人感覺類似于vue中的組件概念,模板可以被各個需要的頁面進行引入調用,模板的定義使用如下方式:
{{index}}: {{msg}} Time: {{time}}
在需要調用模板的頁面通過以下代碼片段使用:
其中為模板定義時指定的name,item為傳入的參數對象,該對象下有idnex、msg、time三個鍵值對。注意如果模板文件與調用不在同一個文件的話必須先進行模板文件的導入,直接在頁面中使用導入模板頁面即可。
10、關于小程序調試
wx開發者工具自帶調試功能,可直接對代碼、樣式文件、緩存等進行編輯查看,還支持控制臺打印:
總結:
1、流暢性:比H5的應用流暢性好,個人覺得相比原生還差一點,介乎兩者之間
2、開發者工具:自動提示功能有限,大部分情況下要開發者自己手碼
3、開發者工具里面看到的效果偶爾和微信里面看到的不同:比如圖片預覽、-image圖片顯示等
4、登錄方式各異:很多小程序都直接使用微信登錄,也有自己做登錄的,不是很統一
5、布局:小程序使用css3的flex布局,靈活性較高
6、巧用工具:小程序開發有些工具可以方便實用,比如wept,可以支持在瀏覽器中實時預覽小程序頁面布局效果,這樣開發和設計可以分工開來了;又如,這個覺得比較強大,可以用來處理一些復雜詳情頁的數據顯示等。