亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

大眾點評點餐小程序開發(fā)實踐之邏輯層

2020-03-21 16:19:08
字體:
供稿:網(wǎng)友

本期想要和大家分享一下大眾點評點餐小程序開發(fā)中的邏輯層的經(jīng)驗。

與視圖層微信自己定義了一套與HTML對應(yīng)的WXML和WXSS不同,小程序的邏輯層還是使用javascript編寫的。不過與我們普通的編寫js還是有一些區(qū)別的。接下來我會根據(jù)實踐進(jìn)行說明。邏輯層代碼結(jié)構(gòu)為

menu
├── menu.html
├── menu.js
├── menu.json
└── menu.less
app.js

作為邏輯層我們只需要關(guān)注app.js和menu.js。

App和Page

App

小程序提供了App方法來注冊整個小程序,在App方法里我們可以傳入一個對象,指定小程序的生命周期函數(shù)以及自定義的函數(shù)或者數(shù)據(jù)。注意這個函數(shù)只能被調(diào)用一次。

App
globalData
onLaunch
onShow
onHide
onError
其他自定義

如上所示,App擁有著4個生命周期函數(shù),我們可以在launch的時候進(jìn)行一些全局信息的獲取,比如用戶信息,門店信息等等,然后存入到全局?jǐn)?shù)據(jù)中。這里的數(shù)據(jù)可以被每個頁面訪問到。

Page

小程序針對每個頁面提供了Page的函數(shù)。整個邏輯層大部分的代碼都會寫在Page函數(shù)中,Page中承接著整個頁面的數(shù)據(jù),生命周期函數(shù),以及在視圖中綁定的事件的觸發(fā)函數(shù),例如各點擊事件。整個Page函數(shù)允許的參數(shù)如下所示:

Page
data
onload
onReady
onShow
onHide
onUnload
onPullDownRefresh
onReachBottom
onShareAppMessage
其他自定義函數(shù)

如上,Page函數(shù)因為是頁面級別的,所以擁有著更多的生命函數(shù),會有下拉刷新事件,會有頁面到達(dá)底部的事件。這里我們需要區(qū)別好各個生命周期函數(shù)。onLoad只會在初始化的時候調(diào)用一次,onShow是每次打開頁面都會調(diào)用,onReady只有頁面初次渲染完成才會被調(diào)用。onHide會在navigateTo(微信提供的跳轉(zhuǎn)API)或者底部tab切換時調(diào)用,onUnload會在redirectTo(微信提供的redirect的API)或者navigateBack(微信提供的回退的API)的時候調(diào)用。Page更具體的渲染過程可以參考下面這張圖:

 

大眾點評,小程序開發(fā),邏輯層

 

簡單描述下就是:視圖層和邏輯層同時進(jìn)行初始化的操作:視圖層ready之后通知邏輯層發(fā)送數(shù)據(jù);邏輯層執(zhí)行onload和onShow方法,然后等待視圖層的通知,在接收到視圖層的通知之后發(fā)送數(shù)據(jù)給視圖層,然后繼續(xù)等待視圖層的通知。視圖層根據(jù)數(shù)據(jù)進(jìn)行初次渲染后通知邏輯層渲染完畢,邏輯層調(diào)用onReady方法。然后后續(xù)的行為邏輯層可以通過再次發(fā)送數(shù)據(jù)重新渲染視圖層。

Page的整個工作流程可以參照下面的圖:

大眾點評,小程序開發(fā),邏輯層


首先Page的data會被用于頁面的初始化渲染。然后用戶會在頁面上,也就是展示層觸發(fā)事件,比如我們點餐的話,點擊了加菜按鈕。頁面監(jiān)聽到這個事件之后,會觸發(fā)在Page函數(shù)中申明的自定義事件。然后根據(jù)具體情況可能會調(diào)用微信的Api發(fā)起請求,根據(jù)請求的結(jié)果,我們調(diào)用setData方法,來改變頁面的數(shù)據(jù),小程序就會監(jiān)聽到數(shù)據(jù)的改變而重新執(zhí)行渲染的過程。這個寫過React的朋友,應(yīng)該會很熟悉,React也是在Component里面申明自定義方法,觸發(fā)后通過setState來重新渲染頁面。我們之前的H5就是使用React寫的,所以邏輯層遷移到小程序的代價并不是很大~

 

getApp和getCurrentPages

小程序內(nèi)申明的變量和函數(shù)只在該文件內(nèi)有效,不同的文件可以申明相同名字的變量和函數(shù),并不會相互影響。上面提到App內(nèi)可以設(shè)置全局?jǐn)?shù)據(jù)。我們在每個Page里面都可以通過全局函數(shù)getApp()來拿到全局的引用實例。然后就可以訪問頁面的數(shù)據(jù)。比如我們在購物車下完單之后回到菜單頁可能會需要進(jìn)行菜單的刷新,我們在購物車頁面就會調(diào)用getApp().data.menuRefresh = true,然后在菜單頁的onShow方法進(jìn)行判斷,例如:

  1. let app = getApp(); 
  2. Page( 
  3.     requestMenu () {    
  4.         //刷新菜單 
  5.     }; 
  6.     onShow () { 
  7.         if (app.data.menuRefresh === true) { 
  8.             app.data.menuRefresh === false
  9.             this.requestMenu(); 
  10.         } 
  11.     } 
  12. ); 

在每個Page內(nèi),我們還可以用getCurrentPages來獲取當(dāng)前頁面棧的實例,數(shù)組形式,第一個元素為首頁,最后一個元素為當(dāng)前頁面。頁面棧的表現(xiàn)情況如下表所示:

路由方式 頁面棧表現(xiàn)
初始化 新頁面入棧
打開新頁面 新頁面入棧
頁面重定向 當(dāng)前頁面出棧,新頁面入棧
頁面返回 頁面不斷出棧,直到目標(biāo)返回頁,新頁面入棧
Tab切換 頁面全部出棧,只留下新的Tab頁面

注意我們不能手動去嘗試修改頁面棧,我們只能根據(jù)頁面棧,來分析是使用哪種微信的API來跳頁面。這里的跳轉(zhuǎn)API還會在下面進(jìn)行講解。

模塊化

小程序是支持模塊化的,支持commonjs的模塊化寫法,也就是module.exports或者exports,這兩個的區(qū)別這里就不細(xì)講了,不了解的可以去看下nodejs的module那塊的文檔。小程序目前并不支持引入node_modules,也就是并不支持第三方的模塊,當(dāng)我們需要使用到外部的依賴的時候,建議直接將代碼拷貝到小程序的目錄中,然后通過相對路徑的require函數(shù)進(jìn)行引入。

微信API

小程序作為微信的一個重要功能,微信的框架提供了非常豐富的微信原生API,可以方便的調(diào)起微信提供的能力,除了視圖層的一些原生組件外,還有一些功能性的API,如掃碼,定位,媒體播放,本地存儲以及支付功能等等。

我們這次使用的較多的是通過微信發(fā)起網(wǎng)絡(luò)請求以及微信的數(shù)據(jù)存儲。

發(fā)請求

微信提供了wx.request來發(fā)起請求,注意這個方法發(fā)起的是HTTPS請求。所以在開發(fā)微信小程序之前,大家得先遷一下HTTPS~我們自己在使用API的時候,還用了pinkie這個包將request包裝成了Promise的形式方便我們使用。
比較重要的一點是微信的運行環(huán)境并不是瀏覽器,并不提供cookie的功能。但是用戶我們解決用戶鑒別的問題是帶上用戶的token,用戶的token是在用戶登錄的時候后端生成好了放置到App的全局?jǐn)?shù)據(jù)中。

數(shù)據(jù)存儲

我們大眾點評點餐頁面上有大量的菜單數(shù)據(jù),這部分?jǐn)?shù)據(jù)之前在H5上實現(xiàn)的時候用的是瀏覽器的localstorage。這次切換到微信的storage,代價很小,用了一下適配器模式,將微信的數(shù)據(jù)接口適配成我們需要的接口就好了。這樣也是為了以后的迭代慢慢讓H5與小程序使用同一套代碼。

大眾點評,小程序開發(fā),邏輯層

 

導(dǎo)航

小程序為了減少用戶使用的時候的困擾,規(guī)定了頁面路徑最多只能有5層,所以我們使用的時候得盡量避免多層級的交互方式。

大眾點評,小程序開發(fā),邏輯層


為了方便調(diào)用,我們這次管理頁面跳轉(zhuǎn)的時候自己封裝了一下函數(shù),就是通過getCurrentPages來對頁面棧進(jìn)行分析,然后選擇跳轉(zhuǎn)頁面的方式:
  1. const app = getApp(); 
  2. module.exports = function go2Page(opts) { 
  3.     if (!opts) return
  4.     if (!opts.url) return
  5.     let url = opts.url; 
  6.     //拿到當(dāng)前的頁面棧 
  7.     const history = getCurrentPages(); 
  8.     let path = url.split('?'
  9.     let params; 
  10.     if (path.length === 2) { 
  11.         params = path[1]; 
  12.     } 
  13.     let page = path[0].split('/').pop(); 
  14.     let index = -1; 
  15.     for (var i = 0; i < history.length; i++) { 
  16.         let hPath = history[i].__route__; 
  17.         let hPage = hPath.split('/').pop(); 
  18.         if (page == hPage) { 
  19.             index = i; 
  20.             break
  21.         } 
  22.     } 
  23.     if (index === -1) { 
  24.         //如果不存在這個頁面,直接跳轉(zhuǎn) 
  25.         wx.navigateTo({ 
  26.             url: url 
  27.         }); 
  28.     } else { 
  29.         //如果存在這個頁面,就回退回去 
  30.         if (params) { 
  31.             //query是處理下url參數(shù)的自己定義的函數(shù) 
  32.             params = query(params); 
  33.         } 
  34.         //將跳轉(zhuǎn)的頁面的參數(shù)保存到全局?jǐn)?shù)據(jù)中,然后在頁面中可以去拿取,store是自己申明的 
  35.         app.store(page, params); 
  36.         wx.navigateBack({ 
  37.             delta: history.length - (index + 1) 
  38.         }); 
  39.     } 

Tip

由于小程序的框架并非運行在瀏覽器中,所以javascript在web端的一些能力都無法使用,除了上面提到的cookie,還有document,window等等。開發(fā)者所有代碼最終會被打包成一份javascript,在小程序啟動的時候運行,直到小程序銷毀。這一點類似于瀏覽器的ServiceWorker,所以邏輯層也稱之為App Service。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
最新国产麻豆精品| 日韩欧美一区二区免费| 污视频网站在线播放| 天天操天天爽天天射| 狂野欧美xxxx韩国少妇| 欧美人在线视频| 欧美日本韩国一区| 激情视频在线观看| 国产精品久久久久久无人区| 黄色一级免费视频| 欧美少妇另类| 国产一区二区三区久久久| 久久精品国产综合| 亚洲成人激情社区| 做爰高潮hd色即是空| www.精品久久| 成人欧美一区二区三区视频xxx| 91蝌蚪九色| 亚洲欧美日韩精品久久奇米色影视| 成人影视免费观看| 国产又黄又猛视频| 久久久久久亚洲精品不卡| 岛国视频一区免费观看| 香蕉视频在线观看网站| 欧美尿孔扩张虐视频| 中文字幕av一区| 国产女人18毛片18精品| 国产自产一区二区| 亚洲熟妇无码av| wwwxxx黄色片| 97精品伊人久久久大香线蕉| 中文字幕av在线免费观看| 欧美一区二区高清在线观看| 蜜臀av粉嫩av懂色av| 中文字幕www| 国色天香2019中文字幕在线观看| 午夜婷婷国产麻豆精品| 91精品观看| 国产又粗又猛视频免费| 国产一级生活片| 国产精品久久久久久久久久东京| 国内精品久久久久久影院8f| 99九九视频| 1区1区3区4区产品乱码芒果精品| 亚洲精品88| 在线观看免费视频黄| 国产做受69高潮| 日韩av在线免费看| 狠狠干婷婷色| 亚洲人和日本人hd| 在线观看日韩高清av| 成人小说亚洲一区二区三区| 在线看无码的免费网站| 曰皮视频在线播放免费的| 放荡的美妇在线播放| 91香蕉视频污在线观看| 国产一区二区三区成人| japonensisjava老师可播放| 成人精品亚洲人成在线| 欧美日韩三级电影在线| 免费在线观看日韩欧美| 伊人网站在线| 精品亚洲夜色av98在线观看| 日韩资源在线观看| 午夜伦理在线视频| 国产电影一区二区三区爱妃记| 国产无遮挡猛进猛出免费软件| 亚洲精品97久久中文字幕| 欧美一区成人| 日本色图欧美色图| 欧美videossex另类| 欧美精品一区二区在线播放| 一个人看的www在线免费视频| 亚洲91精品在线观看| 亚洲欧美日韩精品| 亚洲狠狠丁香婷婷综合久久久| 中文字幕第38页| 巨乳女教师的诱惑| 日韩在线观看免费高清| 在线视频第一页| 国产欧美精品在线播放| 中文字幕一区二区三区人妻四季| 懂色一区二区三区免费观看| 狠狠躁夜夜躁人人爽视频| 九九久久久久99精品| 国产黄在线观看免费观看不卡| 视频亚洲一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 9999在线精品视频| 欧美理论电影在线播放| 中文字幕在线观看网站| 秋霞在线观看一区二区三区| 成人午夜激情片| 欧美videosex性欧美黑吊| 欧美又大又硬又粗bbbbb| 天天操天天干视频| 日产精品久久久| 亚洲日产国产精品| 99蜜桃臀久久久欧美精品网站| 国产午夜亚洲精品午夜鲁丝片| 日本熟妇一区二区三区| 在线精品一区二区三区| 色婷婷综合久久久中字幕精品久久| 麻豆久久久9性大片| 亚洲欧美成人一区| 亚洲精品视频在线观看免费视频| 久久99精品久久久久久园产越南| 黄色欧美在线| 久久伊人亚洲| 国产视频精选在线| 国产一区二区看久久| 中文国语毛片高清视频| 欧美午夜精品在线| 日韩激情一区二区三区| 一级做a爰片性色毛片视频| 国产一级片中文字幕| 日本一区二区三区精品| 国产无套内射又大又猛又粗又爽| 丝袜诱惑亚洲看片| 一本色道a无线码一区v| 二区三区在线视频| 国产精品视频1区| 狠狠色丁香久久婷婷综合_中| 97视频精品| 国产精品影院在线| 欧美极品少妇xxxxⅹ免费视频| 成年网站在线视频网站| 亚洲一区二区三区四区av| 午夜欧美福利视频| 一区二区三区不卡视频在线观看| 午夜美女久久久久爽久久| 中文字幕欧美视频在线| www.亚洲成人网| 国产一级揄自揄精品视频| 视频一区在线视频| 91在线观看| 欧美精品一区二区三区蜜桃| 亚洲欧洲日韩一区二区三区| 国产色在线 com| 91亚洲成人| 男人天堂欧美日韩| 欧美午夜片欧美片在线观看| 老汉av免费一区二区三区| 免费的一级黄色片| 亚洲天堂男人天堂女人天堂| 精品女同一区二区三区在线播放| 在线一二三区| 成人性生交大片免费看中文网站| 成人午夜免费在线视频| 日本污视频网站| 久久久久久久中文字幕| 国产一区二区视频在线免费观看| 午夜电影网亚洲视频| 欧美性20hd另类| 亚洲一区在线免费观看| 国内外成人免费视频| 欧美知名女优| a屁视频一区二区三区四区| 北岛玲精品视频在线观看| 欧美一级在线视频| 中文字幕一区二区中文字幕| 久久久久久99久久久精品网站| 久久手机免费观看| 伊人精品在线视频| 38少妇精品导航| 日日摸日日碰夜夜爽无码| 一区二区三区国产豹纹内裤在线| 午夜视频99| 久久亚洲成人| 中文字幕日本一区二区| 国产乱国产乱300精品| 国产日韩欧美综合| 极品一区美女高清| 性生交大片免费全黄| 大胆欧美人体视频| 成人三级视频在线播放| 国产成人啪精品视频免费网| 国产精品九九九| 毛片视频免费| 国产xxx精品视频大全| 久久久久久久人妻无码中文字幕爆| www.欧美精品| 成年人在线视频免费观看| 久久精品一区二区三区四区五区| abab456成人免费网址| 国产亚洲欧美日韩在线一区| 国产精品久久久久久久久晋中| 欧美黑人国产人伦爽爽爽| 九色在线播放| 在线观看亚洲精品视频| 国产在线视频卡一卡二| 激情久久一区二区| 久久久久久亚洲中文字幕无码| 国产美女一区二区| 草裙成人精品一区二区三区| 中文字幕国产精品久久| 日韩av在线网站| 久久久久久久久综合| 亚洲人成高清| 狠狠久久亚洲欧美| 二区三区在线| 影院在线观看全集免费观看| 国产妇女馒头高清泬20p多| 操人视频在线观看| 亚洲曰韩产成在线| aa级大片欧美三级| 久热国产精品视频| 成人免费视频国产在线观看| 91精品在线麻豆| 欧美一区二区三区免费在线看| 久久九九国产| 东京热无码av男人的天堂| 久久久精品视频免费| 无码人妻久久一区二区三区蜜桃| 中文在线资源观看视频网站免费不卡| 欧美日韩激情四射| 亚洲一区二区三区在线看| 亚洲精品91美女久久久久久久| 亚洲中文字幕无码不卡电影| 插菊花综合1| 日韩av在线播放观看| 国产盗摄精品一区二区酒店| segui88久久综合| 99re这里只有精品视频首页| av天天av| 制服丝袜在线一区| 蜜臀av一区| 久久精品一区二区三区四区五区| 国产福利精品视频| 国产剧情在线一区| 九义人在线观看完整免费版电视剧| 亚洲精选久久| 国产精品一区二区av交换| 欧美二三四区| 成人在线观看高清| 国产亚洲精品bv在线观看| 欧美r级电影在线观看| 人人精品亚洲| 成人午夜av在线| 精品视频在线观看网站| 欧美在线看片| 久久一级免费视频| 国产欧美精品xxxx另类| 国产精品自产拍在线网站| 欧美一区二区三区观看| av网站免费看| 亚洲成人生活片| 日韩小视频在线播放| 国产精品区一区二| 美女主播视频一区| 国产精品久久国产精麻豆99网站| 国产在线拍揄自揄拍无码| av在线电影网站| 日产精品一区二区| 日本欧美在线视频免费观看| 欧美性色xo影院| free欧美性| v天堂福利视频在线观看| 国产亚洲精品v| 好吊日在线视频| 在线观看视频黄色| 黄色成人av网站| 日韩精品一区二区三区色欲av| 亚洲精品视频一区二区三区| av激情亚洲男人天堂| 日韩一区二区在线看片| 国产变态拳头交视频一区二区| 欧美影院三区| 国产美女在线精品| 欧美家庭影院| 国产日韩精品在线观看| 亚洲在线观看| 国产成人一二| 宅男在线观看免费高清网站| 最新中文字幕久久| 亚洲高清毛片| 日本中文一区二区三区| 国产在线一区二区三区播放| 亚洲女厕所小便bbb| 亚洲国产aⅴ天堂久久| 久久久精品一区二区| 日本在线精品| 日韩高清在线一区| 成人污版视频| 国产人妻大战黑人20p| 国产一区二区三区四区| 91免费视频观看| 国产剧情一区二区在线观看| 日韩欧美视频在线播放| 日韩欧美亚洲| 国产一区二区| 天天综合天天做天天综合| 国产成人精品在线视频| 精品一区91| 国产精品h在线观看| 欧美午夜不卡在线观看免费| 久久久久毛片免费观看| av手机在线观看| 狠狠躁夜夜躁人人爽天天高潮| 蜜桃在线一区二区三区精品| 国产亚洲精品成人a| 欧美专区日韩视频| a视频免费看| 国产l精品国产亚洲区久久| 飘雪影院手机免费高清版在线观看| 蜜桃特黄a∨片免费观看| 青青草超碰在线| 黄色影院一级片| 老司机精品久久| 精品人妻一区二区三| 成人6969www免费视频| 99热这里只有精品首页| 国产精品88久久久久久妇女| 人妻体内射精一区二区| 欧美一区在线观看视频| 欧美老女人在线视频| 欧美三级午夜理伦三级中视频| 色噜噜狠狠色综合中国| 欧美三级第一页| 国产午夜精品理论片a级探花| 国模私拍国内精品国内av| 欧美精品一区二区三区在线四季| 欧美伦理在线视频| 中文字幕欧美三区| 国产一区二区h| 欧美中文字幕一区二区三区| 日产午夜精品一线二线三线| 久久亚洲一区二区三区四区|