微信小程式聚合專案完成總結

2021-10-11 22:42:18 字數 3171 閱讀 6880

專案快做完了,做下總結:

需求:登入模組、裝置列表展示模組、個人中心模組、詳情模組,總共分為這四個模組內容。

一、拿到專案需求後,先建立了一下專案,然後封裝了一些常用的方法,http請求和時間處理函式date

2、因為專案中需要對時間進行處理,後台返回的是時間戳這裡就封裝了乙個時間轉換處理函式,**比較簡單,同http一樣引入全域性。

三、登入模組開發

需求:一鍵登入、輸入賬號密碼登入,兩種方式

1、一鍵登入

分析:(2)、在登入時我們需要獲取code登入標識(有時間限制,只能使用一次)

(3)、傳送登入請求,把code、encrypteddata、iv提交給後端做登入處理,返回sessionkey和token並儲存

2、賬號密碼登入

分析:(1)、傳送請求向後端提交賬號和密碼,返回token並儲存

(2)、這裡輸入賬號和密碼是要做雙向繫結,監聽輸入事件把輸入內容賦值給user和password

(3)、在做清空和密碼隱藏顯示時圖示不要放在輸入框內,不然會觸發冒泡,鍵盤不會收回

(4)、注意在隱藏和顯示密碼這兒,一定好看清文件,是password屬性的true和false來控制隱藏於顯示,不是type屬性

這塊內容沒啥難點,不放**了!

四、首頁&列表頁面

1、初始化頁面

分析:(1)、在頁面載入前要判斷是否已登入(根據儲存的token和sessionkey)

(2)、已登入下,區分是一鍵登入還是賬號密碼登入(賬號密碼登入無sessionkey),然後直接請求列表資料,請求根據狀態碼如果token過期,走重新整理token的介面(重新整理成功則儲存重新整理後的token重新進入該頁面,否則提示重新登入 ==> 清空快取 ==> 跳轉到登入頁)

2、頁面布局

九宮格布局----父盒子

display: flex;

flex-wrap: wrap;

九宮格布局----子盒子

width: calc(calc(100% / 3) - x);

margin: x/2;

3、渲染頁面

資料渲染,比較簡單,不多講

五、個人中心

wx.previewimage()

2、退出登入要清空快取

六、詳情頁面

天哪這乙個頁面得寫多少**啊啊啊…,後台介面只有獲取裝置列表和根據裝置id獲取詳情資料,且格式由於是**不能修改

額,只能一點點寫了,

1、直接把官方的swiper元件拿過來開擼,為了減少請求直接把首頁請求的裝置列表list傳到的詳情頁並儲存

2、初始化,根據傳遞的裝置id,請求詳情資料,把需要的資料繫結到list陣列下對應的裝置資料物件中

3、dom結構是根據不同裝置ui進行了劃分,共有的和私有的,通過wx-if來進行要渲染的內容

4、要區分當前詳情資料第幾頁,這裡首先把拿到的list陣列過濾,得到有詳情頁的資料列表(有些裝置無詳情頁),然後迴圈查詢當前的裝置id,迴圈的key+1值就是第幾個裝置,並且把當swiper元件的當前頁頁設定為key。

5、左右滑動的時候,根據滑動後觸發事件,獲得的索引作為list的索引,拿到下個裝置的id,然後進行渲染(渲染前清除上個裝置的dom)

6、這裡且套了多次迴圈,主要還是請求到的資料格式不理想,導致了寫了很多處理格式的**

7、測試,發現bug,左右來回滑動很快的時候,停下來後頁面會不停抖動,查了下是元件的bug。

解決方式:對滑動事件觸發後 的觸發源做判斷,如果是touch則進行頁面渲染,解決了抖動問題;

測試發現出現無法滑動的bug,分析是滑動後更改當前頁導致

解決方式:做節流,當觸發滑動事件後到渲染資料這段時間禁止頁面滑動,當渲染完成才允許滑動,現在就是如何禁止頁面滑動,元件沒這個屬性,想到通過新增乙個透明層來阻止滑動執行(有更好的方法的小夥伴可以分享下)。

7、需要增加要實時更新資料和上報推送訊息-------websocket

上網找了下有很多現成的輪子,看了下很簡單。

this.websokcketmethods();
//監聽指令

websokcketmethods(e))

sotk.onclose(onclose => )

sotk.onerror(onerror => )

sotk.onmessage(onmessage => )
//傳送訊息

sendsocketmessage(msg) , function (res) )}},

//關閉連線

closewebsocket(str)})

}}複製**

8、需求更改 要用mqtt

好吧,開擼

分析需要:在詳情頁面只重新整理頁面資料不做訊息提示,其他頁面做彈框推送提示

**mqtt全域性連線,如果沒有頁面都要連線一次的話會出現bug ,websocket連線有次數限制,官方說明:

這裡因為要在登入之後連線mqtt,並且主題是動態根據使用者id而改變的,所以這裡封裝了個promise,並把連線後的client匯出,做資料監聽。

複製**

var mqtt = require(『utils/mqtt.min.js』);

var client = null;

var connect = function(id)

client = mqtt.connect('wxs://***', options)

client.on('reconnect', (error) => )

client.on('error', (error) => )

let that = this;

client.on('connect', (e) => , function (err)

})})

})

}

複製**

監聽:client.on(『message』, function (topic, message, packet) )

注意它來了!

connect(id)只在首頁呼叫一次,並且把返回的client存為全域性使用,然後就可以在詳情頁面中通過全域性client直接監聽messgae並做響應的邏輯了。

關閉連線:在退出登入或者判斷token不存在的時候執行,由於關閉後它會可能自動連線,所以最好是在判斷token不存在時關閉連線

wx.closesocket()

微信小程式 自留總結

01 獲取使用者資訊,若使用者已授權,可以直接呼叫 getuserinfo 獲取頭像暱稱,不會彈框 若沒有使用者授權資訊,則彈框提示使用者授權。02 獲取手機號,與授權一樣需要乙個按鈕,需先呼叫wx.login介面,這裡應該也需要後台去解析出該使用者的手機號 03 可能需要的幾個常見api 從本地相...

(微信小程式)一 初識微信小程式

需要看的 先是檔案目錄 一 pages 他存放於多個頁面 如 index log頁面。可以把他裡面的每個資料夾看成乙個整體。這個整體存放著 html css 和 資料 1 index資料夾 存放的index頁面的目錄。2 index.js 他可以處理得到 ajax 或自定義定義的資料。把得到的值封裝...

微信小程式專案開發教程

1.目錄結構 test page index index.js index.json index.wxml index.wxss onlaunch function onshow function onhide function globaldata debug true page containe...