摘要:往期回顧打怪升級小程序評論回復和發貼功能實戰二填坑手冊小程序生成海報一拆彈時刻小程序生成海報二填坑手冊小程序目錄結構和組件使用心得
在學習成長的過程中,常常會遇到一些自己從未接觸的事物,這就好比是打怪升級,每次打倒一只怪,都會獲得經驗,讓自己進步強大。特別是我們這些做技術的,逆水行舟不進則退。下面分享下小程序開發中的打怪升級經歷~
先來看下實際效果圖,小程序開發中有時會要做一些的功能復雜的組件,比如評論回復和發帖功能等,這次主要講的是關于評論模塊的一些思路和實戰中的經驗,希望能拋磚引玉,給大家一些啟發,一同成長~
>>(最下面有實戰demo的地址,可以直接瀏覽器打開添加至IDE工具中) <<
根據這個demo.gif,本人做了一個簡單的流程圖,幫助大家理解。下面羅列一些開發中需要“打的怪”:1、組件目錄結構
├─components ---小程序自定義組件 │ ├─plugins --- (重點)可獨立運行的大型模塊,可以打包成plugins │ │ ├─comment ---評論模塊 │ │ │ │ index.js │ │ │ │ index.json │ │ │ │ index.wxml │ │ │ │ index.wxss │ │ │ │ services.js ---(重點)用來處理和清洗數據的service.js,配套模板和插件 │ └─submit ---評論模塊子模塊:提交評論 index.js index.json index.wxml index.wxss
為什么要多帶帶做個評論頁面頁面(submit)?
因為如果是當前頁面最下面input輸入的形式,會出現一些兼容問題,比如:
不同手機的虛擬鍵盤高度不同,不好絕對定位和完全適配
彈窗輸入框過小輸入不方便,如果是大的textare時,容易誤觸下面評論的交。
注:目錄結構,僅供參考。
2、NODE端API接口返回結構和頁面結構//node:API接口返回 { "data": { "commentTotal": 40, "comments": [ { "contentText": "喜歡就關注我", //評論內容 "createTime": 1560158823647, //評論時間 "displayName": "智酷方程式", //用戶名 "headPortrait": "https://blz.nosdn.127.net/1/weixin/zxts.jpg", //用戶頭像 "id": "46e0fb0066666666", //評論ID 用于回復和舉報 "likeTotal": 2, //點贊數 "replyContents": [ //回復評論 { "contentText": "@智酷方程式 喜歡就回復我", //回復評論內容 "createTime": 1560158986524, //回復時間 "displayName": "神秘的前端開發", //回復的用戶名 "headPortrait": "https://blz.nosdn.127.net/1/2018cosplay/fourth/tesss.jpg", //回復的用戶頭像 "id": "46e0fb00111111111", //回復評論的ID "likeTotal": 2, //回復評論的點贊數 "replyContents": [], //回復的回復 蓋樓 "replyId": "46e0fb001ec222222222", //回復評論的獨立ID,用于統計 }, { "contentText": "@智酷方程式: 威武,學習學習", "createTime": 1560407232814, "displayName": "神秘的前端開發", "headPortrait": "https://blz.nosdn.127.net/1/2018cosplay/fourth/tesss.jpg", "id": "46e0fb00111111111", "likeTotal": 0, "replyContents": [], "replyId": "46e0fb001ec222222222", } ], "replyId": "", "topicId": "46e0fb001ec3333333", } ], "curPage": 1, //當前頁面 //通過ID 判斷 當前用戶點贊了 哪些評論 "likes": [ "46e0fb00111111111", "46e0fb001ec222222222", "46e0fb0066666666", ], "nextPage": null, //下一頁 "pageSize": 20, //一頁總共多少評論 "total": 7, //總共多少頁面 }, "msg": "success", "status": "success" }
{{item.displayName}} {{item.createTime}} {{item.likeTotal||""}} {{item.contentText}} ... 和上面類似 評論加載完成
通過node提供一個API接口,通過用戶的openId來判斷是否點贊,這里提供一個參考的JSON結構。
JSON盡量做成array循環的結構方便渲染,根據ID來BAN人和管理。底部加上加載更多的效果,同時,記得做一些兼容,比如默認頭像等。
這里建議很多交互如果不是必須要特別定制,可以才用微信原生的組件,效果和兼容性都有保障,而且方便簡單。
對評論進行回復/舉報... 內部省略
//JS部分 微信原生wx.showActionSheet 顯示操作菜單交互 _goToReply(e) { // 上面的各種授權判斷省略... let self = this; wx.showActionSheet({ itemList: ["回復", "舉報"], success: function (res) { if (!res.cancel) { console.log(res.tapIndex); //前往評論 if (res.tapIndex == 0) { //判斷是否是 評論的評論 self._goToComment(replyid); } //舉報按鈕 if (res.tapIndex == 1) { //彈出框 self.setComplain(contentid); } } else { //取消選擇 } }, fail(res) { console.log(res.errMsg) } }); } //當選擇“舉報”的時候,二次調用 wx.showActionSheet 方法 setComplain(contentid){ let complainJson = ["敏感信息", "色情淫穢", "垃圾廣告", "語言辱罵", "其它"]; wx.showActionSheet({ itemList: complainJson, success: async res => { if (!res.cancel) { //選擇好后,提交舉報 try { let complainResult = await request.postComplainReport(complainJson[index], openid, contentid); if (complainResult.msg == "success") { //提交成功后反饋 } else { } } catch (e) { console.log(e) } } } }); }
顯示操作菜單 wx.showActionSheet 方法說明
屬性 | 類型 | 說明 |
---|---|---|
itemList | Array. |
按鈕的文字數組,數組長度最大為 6 |
itemColor | string | 按鈕的文字顏色 |
success | function | 接口調用成功的回調函數 |
fail | function | 接口調用失敗的回調函數 |
complete | function | 接口調用結束的回調函數(調用成功、失敗都會執行) |
使用這個方法,即是主流的做法,也能很好的兼容不同機型,同時給予用戶“習慣性體驗”。
原生評論排序切換當前選擇:{{array[index]}}
// js部分 Page({ data:{ //查看評論類型切換 array: ["最佳", "最新", "只看自己"], //選擇數組中的第幾個顯示 index:0 }, bindPickerChange(e) { console.log("picker發送選擇改變,攜帶值為", e.detail.value) this.setData({ index: e.detail.value }) } })
picker組件是一個從底部彈起的滾動選擇器,這里我們用它來切換不同評論的排序。每次切換都可以通過 bindchange獲得對應的變化,通過 e.detail.value獲取用戶選擇的索引值。
官方文檔:
https://developers.weixin.qq....
let uriData = { logo: "xxx.jpg", type: "commentReply", title: "文章:小程序評論,動態發帖開發指北 作者:智酷方程式", openId:"xxxxxxxxxxx", replyId:"aaaaaa" //用戶回復的是哪個評論的ID }; wx.navigateTo({ url: `/components/plugins/comment/submit/index?uriData=${encodeURIComponent(JSON.stringify(uriData))}` });
這個可以用encodeURIComponent的方式處理下參數中的中文,避免跳轉發布評論頁接收數據時出現亂碼。
5、發表評論頁顯示和控制評論的字數
{{content.length}}/200 提交
// js部分 Page({ data: { //初始化評論內容,如果是回復則通過傳參變成 @xxxx的形式 content: "@xxxx", }, textareaCtrl: function (e) { if (e.detail.value) { this.setData({ content: e.detail.value }) } else { this.setData({ content: "" }) } } })
textarea 在小程序中改動不大,這個標簽原有的一些屬性都可以繼續使用,通過配置maxlength來控制字數,同時,設置auto-focus="true"可以讓用戶進到這個發表評論頁面時自動彈出虛擬鍵盤和光標定位在輸入的區域。
當然,也可以將發表評論和評論展示區域做在一起,這個就要考慮到要么通過“小程序API”獲取鍵盤高度,要么將“發布評論”置頂區域顯示,也是可以做的,只是相對考慮的點會多些。當時開發評論組件的時候,考慮開發時間短和用戶體驗,權衡后,最終決定以上方案,希望能給到大家一些參考和借鑒,在其他組件開發中觸類旁通。
[代碼片段]評論回復組件實戰demodemo的微信路徑:https://developers.weixin.qq....
demo的ID:oHs5cMma7N9W
如果你裝了IDE工具,可以直接訪問上面的demo路徑
通過代碼片段將demo的ID輸入進去也可添加:
總結,“組件化思想”對于無論做小程序、react/VUE還是其他項目來說,減少重復開發,提高復用性都是一個非常重要的點。評論功能其實只要理清楚整體思路,做起來難度并不大,通過一些原生組件,可以大大提高開發效率,同時保證良好的兼容性。
后面一期還將分享下功能點較多的發帖組件開發。
往期回顧:
[[[打怪升級]小程序評論回復和發貼功能實戰(二)](https://segmentfault.com/a/11...
[[填坑手冊]小程序Canvas生成海報(一)](https://segmentfault.com/a/11...
[[拆彈時刻]小程序Canvas生成海報(二)](https://segmentfault.com/a/11...
[[填坑手冊]小程序目錄結構和component組件使用心得](https://segmentfault.com/a/11...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105546.html
摘要:發帖的功能只要理清思路,其實并不復雜,利用機器做內容審查是關鍵,直接關系到小程序的整體安全。內容檢查重點由于內容安全對于小程序運營至關重要,稍有不慎就容易導致小程序被封,所以在這塊的校驗除了常規人工檢查外,我們還可以用到微信的內容安全。 showImg(https://segmentfault.com/img/remote/1460000019955210?w=658&h=440); ...
摘要:用小程序云開發將博客小程序常用功能一網打盡本文介紹博客小程序的詳情頁的功能按鈕如何實現,具體包括評論點贊收藏和海報功能,這里記錄下整個實現過程和實際編碼中的一些坑??紤]到小程序本身的大小限制,使用的方式是最佳的。 用小程序·云開發將博客小程序常用功能一網打盡 本文介紹mini博客小程序的詳情頁的功能按鈕如何實現,具體包括評論、點贊、收藏和海報功能,這里記錄下整個實現過程和實際編碼中的一...
摘要:用小程序云開發將博客小程序常用功能一網打盡本文介紹博客小程序的詳情頁的功能按鈕如何實現,具體包括評論點贊收藏和海報功能,這里記錄下整個實現過程和實際編碼中的一些坑。考慮到小程序本身的大小限制,使用的方式是最佳的。 用小程序·云開發將博客小程序常用功能一網打盡 本文介紹mini博客小程序的詳情頁的功能按鈕如何實現,具體包括評論、點贊、收藏和海報功能,這里記錄下整個實現過程和實際編碼中的一...
摘要:我網易云用了最多個月時間,只能在此遷移到其他地方,最后定在了來必力。如果大家有方法解決如何把網易云跟帖的文件傳入到來必力,請及時通知我,如文章有任何疑問,請指出。 showImg(https://segmentfault.com/img/remote/1460000010104580); 前言 在7月5日得知一個不幸的消息,我所用的第三方評論系統又一個交牌了(最近被狼人殺洗腦),網易在...
摘要:我網易云用了最多個月時間,只能在此遷移到其他地方,最后定在了來必力。如果大家有方法解決如何把網易云跟帖的文件傳入到來必力,請及時通知我,如文章有任何疑問,請指出。 showImg(https://segmentfault.com/img/remote/1460000010104580); 前言 在7月5日得知一個不幸的消息,我所用的第三方評論系統又一個交牌了(最近被狼人殺洗腦),網易在...
閱讀 1701·2021-11-18 10:02
閱讀 2218·2021-11-15 11:38
閱讀 2665·2019-08-30 15:52
閱讀 2189·2019-08-29 14:04
閱讀 3230·2019-08-29 12:29
閱讀 2086·2019-08-26 11:44
閱讀 993·2019-08-26 10:28
閱讀 830·2019-08-23 18:37