微信小程序開發入門與實踐( 簡體 字) | |
作者:雷磊 | 類別:1. -> 程式設計 -> 綜合 |
出版社:清華大學出版社 | 3dWoo書號: 46764 詢問書籍請說出此書號! 有庫存 NT售價: 345 元 |
出版日:4/1/2017 | |
頁數:350 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787302468011 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章微信小程序簡介1
1.1什么是微信小程序2 1.2什么類型的應用適合用小程序開發5 1.3小程序與原生App(iOS、Android)的優劣對比6 1.4小程序會淘汰原生App嗎10 1.5Web前端的未來10 1.6Web前端開發者與小程序11 1.7MINA框架與微信小程序12 1.8微信小程序beta測試版12 第2章小程序環境搭建與開發工具介紹13 2.1微信Web開發者工具下載及安裝14 2.2新建第一個項目14 2.3微信Web開發者工具界面功能介紹16 2.3.1編輯選項卡17 2.3.2調試選項卡19 2.3.3項目選項卡22 2.3.4編譯選項23 2.3.5后臺選項24 2.3.6緩存選項24 2.3.7關閉選項24 2.3.8快速打開官方API文檔24 2.3.9開發工具的更新24 2.3.10常用小程序快捷鍵25 第3章從第一個簡單的“Welcome”頁面開始小程序之旅26 3.1認識小程序的基本文件結構27 3.2開始動手編寫第一個小程序頁面28 3.3構建welcome頁面的元素和樣式31 3.4小程序所支持的CSS選擇器35 3.5Flex布局36 3.6小程序自適應單位rpx簡介39 3.7全局樣式文件app.wxss42 3.8頁面的根元素page42 3.9app.json中的window配置項44 第4章文章列表頁面47 4.1文章列表頁面元素分析及準備工作48 4.2swiper組件50 4.3Boolean值的陷阱53 4.4構建文章列表的骨架和樣式54 4.5image組件的4種縮放模式與9種裁剪模式57 4.5.1scaleToFill58 4.5.2aspectFit58 4.5.3aspectFill59 4.5.4widthFix60 4.5.59種裁剪模式60 4.6完成靜態文章列表61 4.7.js文件的代碼結構與Page頁面的生命周期64 4.8數據綁定68 4.8.1初始化數據綁定69 4.8.2在哪里可以查看數據綁定對象70 4.8.3綁定復雜對象71 4.8.4數據綁定更新72 4.9列表渲染wx:for76 4.10配置單個頁面導航欄背景色79 4.11從歡迎頁面跳轉到文章頁面80 4.11.1事件80 4.11.2redirectTo與navigateTo82 4.11.3小程序最多只能有5層頁面83 4.11.4冒泡事件與非冒泡事件84 第5章模塊、模板與緩存85 5.1將文章數據從業務中分離86 5.2小程序的模塊87 5.3小程序的模板化89 5.4消除template模板對外部變量名的依賴90 5.5include與import引用模板的區別92 5.6CSS的模塊化93 5.7令人遺憾的模板化而非組件化94 5.8使用緩存在本地模擬服務器數據庫95 5.8.1應用程序的生命周期95 5.8.2使用Storage緩存初始化本地數據庫96 5.8.3緩存的強制清理及注意事項99 5.9編寫緩存數據庫操作類99 5.10使用緩存數據庫操作類101 5.11使用ES6改寫緩存操作類102 5.12完善文章數據103 5.13完整的data.js數據104 第6章文章詳情頁面110 6.1跳轉到文章詳情頁面111 6.2不要在template上注冊事件112 6.3頁面間傳遞參數的3種方式113 6.3.1組件的自定義屬性113 6.3.2通過dataset獲取組件自定義屬性114 6.3.3獲取頁面參數值115 6.4編譯時設置初始化頁面及參數115 6.5讀取文章詳情數據116 6.6文章id號的數據流向圖117 6.7編寫文章詳情頁面118 6.8垂直居中問題的經典解決方法121 6.9動態設置導航欄標題122 6.9.1使用配置文件配置導航欄標題122 6.9.2使用wx.setNavigationBarTitle(OBJECT)設置導航條123 第7章收藏、評論、點贊與計數功能124 7.1收藏、評論、點贊、計數功能準備工作125 7.2文章收藏功能127 7.2.1條件渲染:wx:if與wx:else127 7.2.2實現收藏點擊功能128 7.2.3交互反饋wx:showToast130 7.3文章點贊功能131 7.4本地緩存的重要性及應用舉例133 7.5支持文字、圖片、拍照、語音上傳的文章評論134 7.6文章評論頁面的實現步驟與思路134 7.7獲取并綁定文章評論數據135 7.8顯示文章評論數據140 7.9實現圖片預覽145 7.10實現提交評論的界面146 7.11wx:if與hidden控制元素顯示和隱藏152 7.12實現文字評論框和語音評論框的切換152 7.13input組件153 7.14bindinput事件154 7.15屏蔽評論關鍵字155 7.16實現自定義發送按鈕157 7.17同時支持模擬器回車、真機點擊“完成”發送評論161 7.18圖片與拍照評論的界面實現161 7.19實現從相冊選擇照片與拍照164 7.20icon圖片166 7.21刪除已選擇的圖片167 7.22在小程序中使用CSS3動畫168 7.23實現圖片評論的發送170 7.24實現語音消息的發送171 7.25實現語音消息的暫停與播放174 7.26用戶授權176 7.27解決真機運行時評論頁面滑動卡頓的問題177 7.28文章閱讀計數功能177 第8章背景音樂播放180 8.1顯示音樂播放圖標181 8.2切換音樂播放圖標182 8.3背景音樂播放的特點182 8.4實現單頁面背景音樂播放183 8.5監聽音樂播放185 8.6全局變量與全局音樂播放186 8.7音樂總控開關192 8.8顯示音樂的封面圖片194 第9章豐富文章頁面195 9.1將頁面分享給朋友和微信群196 9.2從swiper組件跳轉到文章詳情頁面197 9.3使用小程序動畫實現點贊特效199 第10章電影204 10.1小程序的tab選項卡205 10.2電影頁面介紹208 10.3編寫豆瓣星星評分組件:stars-tpl模板210 10.4編寫movie-tpl模板212 10.5編寫movie-list-tpl模板213 10.6電影首頁的骨架與樣式215 10.7豆瓣電影API分析216 10.8電影首頁的js編寫217 10.9wx.request發送http/https請求219 10.10設置wx.request的超時時間221 10.11處理返回的電影數據221 10.12綁定處理后的電影數據224 10.13http和https在小程序中的使用說明226 10.14跳轉到更多電影頁面227 10.15編寫movie-grid-tpl模板229 10.16編寫“更多電影”頁面231 10.17實現頁面下拉刷新的“三部曲”234 10.18在模擬器中可執行下拉刷新但在真機中無法執行下拉刷新的常見錯誤237 10.19json中的backgroundColor配置的是哪里的顏色238 10.20實現上滑加載更多數據239 10.21動態設置導航欄loading圖標241 10.22電影搜索244 10.23電影詳情頁面249 10.24電影詳情頁面的骨架和樣式251 10.25編寫電影詳情頁面的業務邏輯代碼258 10.26預覽電影海報261 10.27設置電影頁面的導航欄標題262 第11章設置264 11.1設置頁面265 11.2獲取用戶基本信息272 11.3數據緩存的異步操作275 11.4獲取系統信息277 11.5獲取網絡狀態281 11.6獲取當前位置信息與當前速度信息282 11.7使用微信內置地圖查看位置信息283 11.8監聽羅盤數據制作一個簡易指南針284 11.9在小程序中實現搖一搖286 11.10掃碼289 11.11獲取小程序頁面二維碼292 11.12下載并預覽pdf、word等多種類型文檔293 第12章開放接口300 12.1準備工作301 12.2用戶登錄301 12.3用戶信息校驗307 12.4解析用戶加密數據獲取openId及UnionId313 12.5模板消息316 12.6form表單及picker組件321 12.7發送模板消息323 12.8微信支付328 12.9真實的微信小程序登錄狀態維護336 第13章雜項338 13.1wx:key339 13.2scroll-view組件:在js中控制滾動條343 13.3深入理解小程序的單向數據綁定機制348 13.4深入理解scroll-view組件的bindscrolltolower、lower-threshold屬性349 13.5微信小程序發布流程350 本書主要圍繞Orange Can項目展開一系列編碼工作,用幾近真實的項目介紹小程序的各個API、組件用法,并附帶一些小程序開發的經驗、技巧以及常見的誤區說明。整個Orange Can項目分為三部分:文章閱讀、電影資訊以及設置。文章閱讀包括文章列表、文章詳情以及評論,通過編寫文章閱讀功能的代碼,讀者將學會swiper組件的裁剪模式、image組件的裁剪模式、緩存的使用技巧、列表渲染、數據綁定、模板、音樂播放、錄音、分享等知識。除此之外,讀者將對小程序頁面的生命周期有一個大致了解。學習完這部分內容,讀者將可以輕松做出一個內容型小程序應用。電影資訊功能主要介紹如何調用服務器數據及template模板的使用技巧。設置頁面功能包含大量功能示例,包括獲取硬件設備信息、羅盤與重力感應的應用、掃描二維碼、用戶登錄、用戶信息校驗、解析用戶加密數據、獲取用戶openId、發送模板消息、微信支付等功能。
本書還提供部分服務器的PHP代碼,主要供用戶登錄、校驗、解析加密數據、模板消息、微信支付等功能調用。 本書內容豐富、注重實戰,講解通俗易懂。適合小程序開發人員、培訓機構和企業內部培訓使用。 本書的特點與特色
興許是我向來不喜歡很多編程書籍開篇就大篇幅羅列知識點的做法,從業八年以來,每每翻閱技術類書籍,看到連篇累牘的概念理論就頭疼不已。接到清華大學出版社的邀約后,我長久思忖如何組織小程序開發這本書的編寫思路,寫出一本我自己也喜歡看的書籍。 如果能讓讀者身臨其境地開發一個幾近真實的項目,在不知不覺中就可以學會小程序開發,那該多好。慶幸的是,小程序不是一門語言,它不需要像Java、Python、JavaScript等基礎語言教學一樣羅列一個個基礎語法,它最好的學習方式就是本書的“實踐式”學習。因此,本書將用一個較為完整的“案例項目”把小程序的各個知識點“串接”起來,一邊做項目,一邊學習小程序的開發。做完一個項目就可以入門小程序是本書的目的。 我喜歡這種“實踐式”學習所帶來的“代入感”(如果你玩過各類角色扮演游戲,你就明白什么是代入感),跟著本書一步步coding,你不僅收獲了知識,更是直接完成了一個像模像樣的小程序,這種成就感是學習編程最大的動力。即使你是一個基礎較好的開發者,只看官方的文檔也能學會小程序的開發,我依然建議你認真閱讀本書,因為本書將為你節約大量“試錯”時間。 本書在很多時候并沒有直接給出一個問題的最優解決方案,而是首先給出一個看似很蠢的思路來解決問題。因為這是我們最直接的思維,也是最簡單的解決方案。通過分析這個解決方案有什么缺點,最后給出一個更加優秀的解決問題的建議。我想,這符合我們編程里“重構”的概念。相比于直接給出最優解(事實上編程里很難有最優解,只是相對“優秀”),漸進式的解決問題更加能讓讀者體會到優秀解決方案的優勢,避免對知識的生搬硬套。 我一直認為,本書的編寫思路也是程序員自學的思路,由點及面、由具體到抽象。在工作中遇到了問題,想辦法解決問題,查閱資料學習這個問題的相關知識點,最后把這些知識點總結、歸納,形成自己的知識體系,這是一個通用的學習“套路”。編程的各類語言、框架太多了,技術發展的速度也快得驚人,即使類似功能的框架也多達十幾個,我們很難像學習經典數學、基礎物理學、現代經濟學這樣先學習理論再付諸實踐。Coder有時就要有這種直面未知的勇氣:先解決、再學習,管它三七二十一。 本書雖然定位于入門,但其中不乏一些小程序的進階知識,這主要體現在微信開放接口上。學習微信開放接口不僅需要你擁有前端的知識,更要有一定的服務器編程經驗,否則你很難理解為什么微信要這么設計開放接口的調用流程?為什么需要這么復雜的簽名與令牌體系? 退一步講,不理解也沒關系,遇到類似問題和功能時,你知道怎么去解決即可。在編程里,我們不理解的東西太多了,誰能保證我們將做過的項目、產品每一個細節都理解得清清楚楚、明明白白?有時候記住怎么去做,比為什么這么做更加重要。理解清楚只是一個相對的概念,沒人能夠準確定義理解到什么程度才能稱為“理解清楚”,也沒有人能夠說明深入到什么程度才算是“深入學習”。所以,有選擇地學習原理,把更多精力放在解決問題上,我認為是一個正確的 選擇。 在本書中,當遇到你不熟悉的知識體系時,沒有關系,先寫上去,實現這個功能。當以后有了更豐富的經驗再回過頭來看看這些知識點即可。本書的詳細程度完全可以讓你即使不懂某個知識點,也可以完成整個Orange Can項目。 小程序開發需要的前置技能 如果不考慮服務器,小程序開發只需要開發者具有JavaScript和CSS相關知識即可。 有很多文章說,開發者開發小程序還需要掌握Vue、AngularJS,這有些強人所難了。小程序確實有很多和Vue、AngularJS相似的地方,這主要體現在數據綁定上。但Vue和AngularJS遠比微信小程序要復雜得多,為了開發一個簡單的小程序,學習遠比這個簡單的東西復雜多倍的框架實在沒有必要。 從先來后到的角度看,Vue、AngularJS等經典MVVM框架確實先于小程序出現,且小程序借鑒了許多這些MVVM框架中的經典思想。但對于既沒有開發過小程序,也沒有任何AngularJS、Vue經驗的開發者,這個先來后到的理念對你沒有任何意義。反正都不會,自然是優先學習簡單的,再進階復雜的框架。如果你是一個iOS和Android轉型過來的開發者,完全沒有必要理會Vue和AngularJS,小程序開發中的很多思想相信你在自己的iOS和Android領域已有體會。 如果你只是為了開發小程序前端部分,更沒有必要學習NodeJS。前端是前端,服務器是服務器,我們能把一端做到極致就已經非常了不起了。如果你想一個人開發一個完整的小程序,那服務器語言也沒有規定必須是NodeJS。選擇一個你喜歡的服務器語言,PHP、NodeJS、Python、Java、C#、Ruby都是可以的。 小程序開發需要掌握什么,在我看來是一個偽命題。小程序應該成為零基礎入門開發者學習前端的首選開發平臺(以學習與實踐為目的),因為它足夠簡單,又同現在的主流MVVM框架非常類似,學習曲線很平滑。它應該成為入門其他更復雜、功能更強大的框架的“墊腳石”。 對于一個傳統的Web開發者,在編寫小程序時只需要注意以下兩點: (1)小程序中沒有DOM,請放棄“首先獲取DOM,再操作DOM”的思維。 (2)替代DOM操作的方法是“數據綁定”。控制組件顯示隱藏、切換CSS樣式、控制滾動條,這些很容易用DOM思維思考常見功能在小程序中都是通過“數據綁定”實現的。 如果你想將代碼寫得更加優美和簡潔,那么補充一些ES6和LESS的知識就更好了。 小程序開發難嗎 說小程序是所有開發框架/平臺里最簡單的可能略微有些夸張,但說小程序是目前所有主流移動開發技術中最簡單的毫不夸張。這種簡單來自于兩個方面: 第一,編寫小程序只需要掌握JavaScript和CSS兩門語言。前端最難的是有太多Web前端框架、類庫需要學習。但是,小程序里的JavaScript是“裸奔”的,我們在Web開發中常用的各類框架/類庫在小程序中統統無法使用。jQuery、Zepto、AngularJS、HightCharts、ECharts,這些Web前端學習中的一座座大山,小程序已經全部“干掉了”——小程序運行在一個JSCore中,它本身不支持Web中的window及DOM對象。有些JavaScript庫還是可以使用的,但真的沒有必要了,小程序已經提供了簡單的架構和內置的特性避免使用這些框架。例如,小程序默認使用babel將開發者代碼所使用的ES6語法轉換成三端都能很好支持的ES5代碼,幫助開發者解決環境不同所帶來的開發問題。你所需要掌握的是JavaScript和CSS,原則上講,不再需要學習各類框架和庫了。這無疑減輕了很多初學者的負擔。 第二,小程序本身就是為輕量級應用所設計的平臺,無論是開發工具、設計規范、API設計,無不散發出一種“大道至簡”的氣息。你只需要從官方下載一個開發工具即可立即開始開發小程序,沒有復雜的安裝環境,沒有復雜的目錄結構,也沒有復雜的打包、部署流程。小程序很多近似死板的規范無疑讓開發者減少了很多工作量(不給你選擇,自然簡單)。關于對于開發者的約束,這個仁者見仁、智者見智,有人喜歡它的簡單,也有人憎恨它的“不自由”。 我甚至認為小程序完全可以成為那些完全沒有編程經驗又想進入前端開發領域的人最好的入門平臺。完全可以從小程序入手,通過小程序平滑的學習曲線,在熟悉編程邏輯后,再反向學習Web前端龐大的知識體系,從而進入這個行業。 處于早期階段的小程序 小程序從2016年9月22日公布后,在短短的3個月中連續更新了8個版本。更新速度非常快。但在2017年1月9日正式開放后,版本迭代速度逐步放慢下來。預計正式上線后,小程序的接口會逐步趨于穩定。 小程序目前還處于極為早期的發展階段,但其主要的框架、API都已成型,并不影響我們學習。本書無法保證書籍出版前所使用的API不會在出版后有所調整,這個是我不能控制的。本書中所描述的知識與小程序的行為都只在130400版本中測試和驗證,無法保證以后小程序會不會更改這些行為。事實上,從最開始的內測版本到現在的130400版本,小程序不僅調整API,甚至經常會更改一些MINA框架的運行機制和行為,這將導致原本可以正常運行的代碼突然變得有問題,需要重新調整。 除此之外,本書的Orange Can項目是一個接近于真實項目的小程序,還是有一定復雜度的,我無法保證不出現“任何”bug。事實上,也沒有任何人能保證自己的項目不出現“任何”bug,我們能做的就是嚴格測試、盡量減少bug的數量,并在發現bug后第一時間做出修正。 雖然無法保證書籍中的代碼和API完全不會變更,但我會通過微信公眾號、知乎專欄等方式同讀者交流,保持對書籍的網絡更新。同時,也會持續維護Orange Can示例項目的源代碼,保證項目能夠正確、穩定的運行。 截止本書出版之前,小程序最新版本為0.14.140900。從130400到140900的版本更迭中,沒有再出現因版本更新而造成的問題,項目代碼運行良好。可以看到,小程序從1月9號正式開放后,API日趨成熟,基本能夠保持穩定。 本書與官方文檔的區別 本書并不想成為官方開發文檔的“搬運工”,除了一些非常必要的地方會引用官方文檔的說明,本書幾乎不會大段復制官方文檔。本書更多使用官方API文檔完成一個項目,對官方文檔的主要內容做詳細的補充說明,并附帶對文檔內容的經驗性總結。 官方的API文檔通常定位于工具類的速查手冊而非教程。當然對于開發功底深厚的開發者,只靠開發文檔也可以完成一個小程序項目,但通常需要耗費較長時間。開發文檔只會告訴開發者有哪些能力,但這些能力如何使用還需要開發者自己探索。 本書可以告訴開發者如何使用官方API完成我們自己的業務邏輯,并在這個過程中逐步熟悉官方API,從而達到入門小程序并自己開發一個小程序的目的。 除此之外,目前來說,小程序的開發還是有不少“坑”的。本書嘗試為開發者提前把這些“坑”踩一踩,填實了,以幫助開發者集中精力開發業務,減少浪費在小程序bug上的時間。 一本書是永遠不可能替代官方API文檔的。即使想成為官方文檔的替代品也是不可能的,因為最新最全的資料永遠都由官方文檔率先公布,書籍總會有一定的滯后性,這也是我為什么沒有在本書中大量引用官方文檔的原因。本書的價值在于讓開發者快速入門小程序,并講解小程序的各個特性,降低開發者的學習成本,快速入門開發自己的應用。 官方文檔總體來說還是非常全面優秀的,但也有很多講得不清楚的地方,對于官方文檔中錯誤、遺漏或者沒有講清楚的地方,本書會做詳細的補充說明。建議開發者將本書與官方文檔結合起來閱讀,學習階段以本書為主,文檔為補充;而在開發階段以文檔為主,本書的補充說明為輔。 此外,官方為所有開發者準備了一個非常詳盡的demo,可在微信中搜索“小程序示例”這幾個關鍵字。官方示例demo源代碼下載地址: https://mp.weixin.qq.com/debug/wxadoc/dev/demo.html 下載項目資源文件、源代碼 一本書難以詳盡講解小程序的所有知識點,也無法回答開發中的所有問題,更加難以應對不斷更新的小程序版本。這是一個互聯網的時代,我們將嘗試用書籍+網絡的方式來維護本書,并對小程序最新的變更做出代碼上的改動,以保證我們的示例代碼可以正常運行。讀者朋友也可以通過我的微信公眾號向我提供反饋,并收到書籍、源代碼變更的更新消息。此外,我的知乎專欄也會經常發布一些關于編程和互聯網方面的文章。 所有項目源代碼、資源文件等內容都將在微信公眾號中提供下載地址。讀者可以從我的微信公眾號中獲取項目效果圖和最新版本源代碼。代碼包括Orange Can項目的小程序代碼及部分功能的服務端PHP代碼。 ● 微信公眾號:小樓昨夜又秋風 ● 知乎專欄:小樓昨夜又秋風 ● 知乎ID:七月在夏天 讀者可以訪問地址:http://pan.baidu.com/s/1cxQXie(注意區分數字和英文字母大小寫)獲得本書源代碼。如果在下載過程中遇到問題,請發電子郵件至booksaga@126.com,郵件主題設置為“微信小程序開發入門與實踐配書資源”。 如何閱讀本書 如果你是擁有多年豐富開發經驗的開發者,并且已經對小程序有一定了解,建議快速瀏覽章節目錄,找到你感興趣的主題,然后只看這一小節。 如果你有一定的前端開發基礎,但沒有小程序的開發經驗,建議從頭開始做完Orange Can項目,深入理解書中的每一個開發技巧。建議先看每個頁面的效果圖,或者下載最新源代碼,在熟悉功能后,自己嘗試編寫項目功能,再對比源代碼的實現方式。也許你寫的項目代碼比本書中的還要優秀。 如果你想用小程序來入門前端,那么請先熟悉JavaScript和CSS的基礎知識,然后把Orange Can項目當作一個真實項目,一邊做一邊實踐所學習的JavaScript和CSS知識。遇到不太明白的地方努力搞懂它,實在不懂也沒關系,先寫上去,等有一定經驗后再回過頭來看。但無論如何,一定要完成Orange Can項目的文章和電影這兩個部分。 如果你是一個純粹的技術開發者,那么請直接從第2章開始閱讀。 總體的建議是,對于Orange Can項目的文章和電影部分,應該一步步跟著書籍逐步實現這兩個核心功能;而對于“設置”頁面,結合源代碼“看懂”本書中的內容即可。當然,如果整本書你都能親手敲打每一行代碼,我相信你收獲的絕對不僅僅是小程序開發的知識點。 此外,對于Orange Can項目的CSS樣式,建議開發者不要完全照搬本書的CSS樣式,每個人編寫CSS樣式的思路千差萬別,本書無法保證所有CSS樣式都是有“意義的”,少部分CSS樣式是為了“防御性”而編寫的。重點是小程序相關的知識點和JavaScript代碼。 微信官方開發者社區 微信官方開放了一個開發者社區,開發者可以在社區里向微信官方反饋bug及提出問題。開發者社區地址: https://developers.weixin.qq.com/home 致謝 向我多年的朋友蔣建明致謝,感謝他為本書提供了很多寶貴意見。 感謝石墨文檔聯合創始人陳旭為本書作序。 感謝清華大學出版社王金柱老師的支持,讓我“拖拖拉拉”寫了近三個月才完成本書。 雷 磊 2017年2月8日 |