摘要:美團(tuán)小程序框架入門教程自打?qū)懥嗣缊F(tuán)小程序框架蹲坑指南一發(fā)不可收拾,今天趁周末空閑,來寫個(gè)沒朋友的簡單入門教程,本教程只針對(duì)新手,老鳥勿噴。
美團(tuán)小程序框架mpvue入門教程
自打?qū)懥?美團(tuán)小程序框架mpvue蹲坑指南,
一發(fā)不可收拾,今天趁周末空閑,來寫個(gè)mpvue(沒朋友)的簡單入門教程,本教程只針對(duì)新手,老鳥勿噴。
另外,我還專門為本文做了一個(gè)簡單的項(xiàng)目,如果懶得從頭開始搭項(xiàng)目的童鞋,可以直接去我的
github上克隆到本地,
安裝一下依賴,即可直接在此基礎(chǔ)在開發(fā),不需要做任何配置。如果你覺得該項(xiàng)目對(duì)有幫助,
請順便給我Star,你們的支持是我最大的動(dòng)力,謝謝!
好了,我們進(jìn)入主題,首先,請?jiān)试S引用一下美團(tuán)官方對(duì)mpvue的介紹
mpvue是一個(gè)使用 Vue.js 開發(fā)小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js主要特性
的 runtime 和 compiler 實(shí)現(xiàn),使其可以運(yùn)行在小程序環(huán)境中,從而為小程序開發(fā)引入了整套 Vue.js 開發(fā)體驗(yàn)。
使用 mpvue 開發(fā)小程序,你將在小程序技術(shù)體系的基礎(chǔ)上獲取到這樣一些能力:
徹底的組件化開發(fā)能力:提高代碼復(fù)用性
完整的 Vue.js 開發(fā)體驗(yàn)
方便的 Vuex 數(shù)據(jù)管理方案:方便構(gòu)建復(fù)雜應(yīng)用
快捷的 webpack 構(gòu)建機(jī)制:自定義構(gòu)建策略、開發(fā)階段 hotReload
支持使用 npm 外部依賴
使用 Vue.js 命令行工具 vue-cli 快速初始化項(xiàng)目
H5 代碼轉(zhuǎn)換編譯成小程序目標(biāo)代碼的能力
開始學(xué)習(xí)最好的方式就動(dòng)手,我們就徒手?jǐn)]一個(gè)demo項(xiàng)目出來跑一跑,看看到底有沒有官方說的那么好。
如果你有過vue的開發(fā)經(jīng)歷,相信你會(huì)對(duì)這個(gè)過程非常熟悉,甚至你都不需要安裝其他工具,
直接用vue-cli創(chuàng)建項(xiàng)目,如果你一起沒安裝過vue-cli,那么你要先運(yùn)行一下命令
npm install --g vue-cli
安裝完vue-cli以后,我們就可以運(yùn)行一下命令,來自動(dòng)構(gòu)建一個(gè)項(xiàng)目(期間會(huì)詢問你是否使用一些工具/插件,
請根據(jù)自己的實(shí)際情況選擇y或n,對(duì)于不懂得該選y還是n的,統(tǒng)統(tǒng)選n)
vue init mpvue/mpvue-quickstart test-wxapp
然后 進(jìn)入我們創(chuàng)建的項(xiàng)目,并安裝依賴
cd test-wxapp npm i
最后,在運(yùn)行一下我們的開發(fā)服務(wù)
npm run dev
項(xiàng)目就跑起來了,這個(gè)時(shí)候,我們打開微信開發(fā)者工具,選擇小程序,然后新建一個(gè),項(xiàng)目目錄填
我們項(xiàng)目目錄下的dist目錄 test-wxapp/dist,就可以看到效果了
到此為止,一個(gè)基本的項(xiàng)目就完成了,但是,本文的目的不是讓你學(xué)會(huì)搭一個(gè)空項(xiàng)目的,空項(xiàng)目的話,我覺得官方教程做的已經(jīng)夠好了。
接下來,我們來刪掉幾個(gè)示例文件,然后一步步添加頁面.
首先,我們看一下項(xiàng)目的配置文件 /src/main.js 里面的初始內(nèi)容如下:
import Vue from "vue" import App from "./App" Vue.config.productionTip = false App.mpType = "app" const app = new Vue(App) app.$mount() export default { // 這個(gè)字段走 app.json config: { // 頁面前帶有 ^ 符號(hào)的,會(huì)被編譯成首頁,其他頁面可以選填,我們會(huì)自動(dòng)把 webpack entry 里面的入口頁面加進(jìn)去 pages: ["pages/logs/main", "^pages/index/main"], window: { backgroundTextStyle: "light", navigationBarBackgroundColor: "#fff", navigationBarTitleText: "WeChat", navigationBarTextStyle: "black" } } }
這里的 config 字段下面的內(nèi)容,就是整個(gè)小程序的全局配置了,其中pages是頁面的路由,window則是頁面的一些配置(大部分都是頂部欄的配置)
,這些配置,最終都會(huì)被打包到原生小程序的app.json,對(duì)這些配置不了解的,建議看一下微信方法的小程序文檔,這里不做贅述。
我們先把/src/pages 下面的counter和logs兩個(gè)文件夾刪掉,只保留一個(gè)index ,順便把 /src/components 文件夾下面的文件也全刪掉,
然后把/src/main.js 里面的 config.pages里面多余的路由也刪掉,只保留一條["^pages/index/main"],這樣目前就只有個(gè)index頁面,
然后我們打開/src/pages/index/index.vue 我們把里面多余的代碼刪掉,只保留一個(gè)基礎(chǔ)骨架
我是首頁
tip /src/utils/index.js 是一個(gè)公共函數(shù)庫,里面只有一個(gè)簡單的格式化日期函數(shù),不要也可以刪掉
到目前為止,一個(gè)干凈的空項(xiàng)目就算是ok了,接下來我們來對(duì)微信原生的一些反人類的東西來做一下優(yōu)化。
一、先用mptoast組件代替官方提供的wx.showToast, wx.showToast諸多不便我就不說了,關(guān)鍵是還有坑
小程序基礎(chǔ)庫比較低的,不管你怎么設(shè)置,總是會(huì)在彈窗里面加一個(gè)鉤鉤,有時(shí)候我想彈出錯(cuò)誤消息也是打鉤,
嚴(yán)重誤導(dǎo)用戶,字?jǐn)?shù)上還有限制有帶icon的不能超過7個(gè)字,你說說,你說說 7個(gè)字夠干嘛的,
那我們來看看mptoast,據(jù)官方介紹mptoast具有輕量,配置少,冗余少,使用簡單,可定制性強(qiáng)等特點(diǎn)
我們開根據(jù)官方介紹,從npm引入并配置
npm i vuex npm i mptoast -D
在項(xiàng)目的主配置文件(一般位于src/main.js)加入以下代碼
import mpvueToastRegistry from "mptoast/registry" mpvueToastRegistry(Vue)
在你需要彈窗的頁面,引入組件,并注冊,然后在頁面內(nèi)加入一個(gè)你注冊的組件,就可以在js里面調(diào)用this.$mptoast()了, 以下是一個(gè)簡單的實(shí)例
<-- 省略其他代碼 -->
使用起來還是蠻簡單的
二,用promise封裝異步請求函數(shù)
在小程序的環(huán)境下面,要想發(fā)送一個(gè)外部請求,我們只能使用小程序官方提供的wx.request方法,
但是該方法的代碼風(fēng)跟跟Jquery年代的Ajax一樣,都散靠回調(diào)來處理請求響應(yīng),如果有很多層回調(diào),
就會(huì)有很多層嵌套,這讓我們這些平時(shí)被async-await慣壞的人怎么接受?
所以,建完基本項(xiàng)目,我們要做的第一件事,就是用wx.request自己封裝一個(gè)基于promise的異步請求方法。
我們先來看一下 wx.request的一個(gè)官方示例代碼
wx.request({ url: "test.php", //僅為示例,并非真實(shí)的接口地址 data: { x: "" , y: "" }, header: { "content-type": "application/json" // 默認(rèn)值 }, success: function(res) { console.log(res.data) } })
可以看到,每次請求都要發(fā)送一大堆的東西,重點(diǎn)少這些東西里面,很可能對(duì)于一個(gè)項(xiàng)目來說,
絕大部分都是固定不變的,那這樣,不是冗余了么。
tip: 更多wx.request參數(shù),請參考 微信官方文檔
我們分析一下,第一個(gè)參數(shù)是url,也就是我們請求的地址,這個(gè)應(yīng)該是每次都不一樣的,但是,不一樣的應(yīng)該也只是url的最后一部分,
接口名稱的位置不一樣,前面的服務(wù)器地址一般都是一樣的,例如http://www.abc.com/api/member/login 對(duì)于同一個(gè)項(xiàng)目的所有接口
服務(wù)器地址http://www.abc.com/api/應(yīng)該都是一樣的,不一樣的只是后面的接口名稱member/login,
那我們可以把url拆分成 服務(wù)器地址 + 接口名稱,這樣做也方便后期上線的時(shí)候,切換服務(wù)器地址。
第二個(gè)參數(shù)是請求的參數(shù),請求的參數(shù)應(yīng)該是每次都不一樣的,所以這個(gè)我們就不做修改(事實(shí)上實(shí)際應(yīng)用中,
經(jīng)常有可能出現(xiàn)需要每個(gè)接口都帶一個(gè)token的,我們也可以在這里統(tǒng)一加上去,不過這里就不做深入)
第三個(gè)參數(shù)是 請求頭,這個(gè)一般同一個(gè)項(xiàng)目里面,這些都是一樣的,所以我們就寫死。 這里還有一個(gè)參數(shù)method請求方法,
這里因?yàn)槭褂媚J(rèn)值GET,所以就沒列出,我們這邊需要做設(shè)置,因?yàn)楝F(xiàn)在前后分離的模式,現(xiàn)在基本上大部分都是POST請求,所以我們這邊也寫死成method:"POST"
最后一個(gè)就是處理請求結(jié)果回調(diào)函數(shù),示例里面只有一個(gè)請求成功的回調(diào),其實(shí)我們應(yīng)該再加一個(gè)請求實(shí)例的處理函數(shù),
fail,而我們封裝這個(gè)函數(shù)的重點(diǎn),就是要用promise來處理這兩個(gè)回調(diào)函數(shù),使它們可以用async-await的語法
// 假設(shè)以下代碼在 `/src/utils/requestMethod.js` let serverPath = "http://www.abc.com/api/" export function post(url,body) { return new Promise((resolve,reject) => { wx.request({ url: serverPath + url // 拼接完整的url data: body method:"POST", header: { "content-type": "application/json" }, success(res) { resolve(res.data) // 把返回的數(shù)據(jù)傳出去 }, fail(ret) { reject(ret) // 把錯(cuò)誤信息傳出去 } }) }) }
有了這樣的封裝,我們就可以在其他地方引入 上面這個(gè)文件,然后使用post函數(shù)請求
import {post} from "/src/utils/requestMethod.js" // 需要注意的是,這行代碼必須要在async修飾的函數(shù)里面才能正確調(diào)用 let res = await post("member/login",{name:myname})
如果你覺得每次都要import這個(gè)文件很麻煩,那我們也可以把它掛在到Vue(mpvue)的原型(prototype)上,我們打開/src/main.js文件,然后在里面加入以下代碼
import {post} from "/src/utils/requestMethod.js" Vue.prototype.$post = post
這樣,我們就可以在Vue(mpvue)的所有實(shí)例里面,直接使用 this.$post()來調(diào)用,只要一行代碼,
// 這行代碼同樣需要在async修飾的函數(shù)里面才能正確調(diào)用 let res = await this.$post("member/login",{name:myname})
怎么樣?是不是比原生的方便很多呢?
結(jié)束語當(dāng)然,跑起來以后,你可能還會(huì)遇到各種問題,這里我有對(duì)我自己遇到的問題做了一些總結(jié)
美團(tuán)小程序框架mpvue蹲坑指南,希望對(duì)你有幫助,
還有官方文檔也是很不錯(cuò)的哦
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/94159.html
摘要:這個(gè)是我們約定的額外的配置這個(gè)字段下的數(shù)據(jù)會(huì)被填充到頂部欄的統(tǒng)一配置美團(tuán)汽車票同時(shí),這個(gè)時(shí)候,我們會(huì)根據(jù)的頁面數(shù)據(jù),自動(dòng)填充到中的字段。 美團(tuán)小程序框架mpvue(花名:沒朋友)蹲坑指南 第一次接觸小程序大概是17年初,當(dāng)時(shí)小程序剛剛內(nèi)側(cè),當(dāng)時(shí)就被各種限制折騰的死去活來的,單向綁定,沒有promise,請求數(shù)限制,包大小限制,各種反人類,...反正我是感受到了滿滿的惡意.最近接到一個(gè)工...
摘要:原理架構(gòu)作為與之間相互通信的橋梁部分在環(huán)境中注入的實(shí)現(xiàn)代碼,包含了協(xié)議的拼裝發(fā)送參數(shù)池回調(diào)池等一些基礎(chǔ)功能。部分在客戶端中的功能映射代碼,實(shí)現(xiàn)了攔截與解析環(huán)境信息的注入通用功能映射等功能。 原理架構(gòu) JSBridge 作為native 與 JS 之間相互通信的橋梁JS部分(bridge): 在JS環(huán)境中注入 bridge 的實(shí)現(xiàn)代碼,包含了協(xié)議的拼裝/發(fā)送/參數(shù)池/回調(diào)池等一些基礎(chǔ)功能...
摘要:在這一步,實(shí)例已完成以下的配置數(shù)據(jù)觀測,屬性和方法的運(yùn)算,事件回調(diào)。可以直接寫等標(biāo)簽的寫法之前會(huì)的工程師上手框架的成本較低 簡介 1.美團(tuán)工程師推出的基于Vue.js封裝的用于開發(fā)小程序的框架2.融合了原生小程序和Vue.js的特點(diǎn)3.可完全組件化開發(fā) 特點(diǎn) 1.組件化開發(fā)2.完成的Vue.js開發(fā)體驗(yàn)(前提是熟悉Vue)3.可使用Vuex管理狀態(tài)4.Webpack構(gòu)建項(xiàng)目5.最終H5...
摘要:是由美團(tuán)點(diǎn)評(píng)團(tuán)隊(duì)開發(fā)的,是一個(gè)使用開發(fā)小程序的前端框架。對(duì)于擁有開發(fā)經(jīng)驗(yàn)的開發(fā)者,使用開發(fā)小程序那是一種不錯(cuò)的體驗(yàn)。 mpvue mpvue是由美團(tuán)點(diǎn)評(píng)團(tuán)隊(duì)開發(fā)的, 是一個(gè)使用 Vue.js 開發(fā)小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compiler 實(shí)現(xiàn)。 對(duì)于擁有Vue開發(fā)經(jīng)驗(yàn)的開發(fā)者,使用mpvue開發(fā)小程序那是...
摘要:寫在前面一直有在關(guān)注小程序,也做過一些,不過一直沒上正式項(xiàng)目,剛好這次公司有小程序的項(xiàng)目就入坑了。是美團(tuán)剛出的小程序框架,也很不錯(cuò),可以直接用的寫法去進(jìn)行開發(fā),學(xué)習(xí)成本較低,缺點(diǎn)是剛推出,雖然美團(tuán)內(nèi)部有在使用,不過社區(qū)還沒起來。 寫在前面 一直有在關(guān)注小程序,也做過一些demo,不過一直沒上正式項(xiàng)目,剛好這次公司有小程序的項(xiàng)目就入坑了。項(xiàng)目開發(fā)完,記錄一下遇到的一些坑吧。 框架選用 框...
閱讀 2889·2021-11-24 09:39
閱讀 3144·2021-11-19 10:00
閱讀 1543·2021-10-27 14:17
閱讀 1817·2021-10-14 09:43
閱讀 971·2021-09-03 10:30
閱讀 3420·2019-08-30 15:54
閱讀 2742·2019-08-30 13:05
閱讀 2018·2019-08-30 11:02