1. 程式人生 > >燈燈小程式開發手記:仿今日頭條(下)

燈燈小程式開發手記:仿今日頭條(下)

接著上一篇

  • 下拉重新整理、無限載入
  • 評論顯示
  • 收藏功能

 說明下為什麼不做收藏功能,其實是設計到使用者登陸功能暫時都不做了,包括髮表評論。原因:

微信小程式登陸需要有appid,appid需要公司資質去申請,每個公司申請的數量有限制(好像是30個),每個身份證也只能最多繫結5個。
雖然網上流傳著個人即使申請失敗也可以獲得appid,但是就此失去了一次繫結機會,個人建議還是不要浪費。所以小程式中的登陸、評論、收藏功能此處暫時不做。

重新整理優化

 微信小程式原生提供了下拉重新整理和載入更多事件,這一點還是比較人性化的。
 首先需要在配置檔案,即頁面.json,如index.json新增允許下拉重新整理:

{
    "enablePullDownRefresh":true
}

然後在js程式碼中新增響應事件:

//下拉重新整理
  onPullDownRefresh: function(){
    this.loadArticles(sectionData[currentSectionIndex]['section_id'],false)
  },
  //載入更多
  onReachBottom: function () {
    this.loadArticles(sectionData[currentSectionIndex]['section_id'],true)
  }

注意我把載入更多和下拉重新整理所用的請求方法寫成了一個函式:

loadArticles: function(section_id,ifLoadMore) //分類id、是否是載入更多

這個ifLoadMore起區分的作用,如果是false,則將獲得的資料直接替換;如果是true,則將獲得的資料追加在原有的資料後面。

          if(ifLoadMore){
            //載入更多
            if(articleData){
              sectionData[currentSectionIndex]['articles'] = sectionData[currentSectionIndex]['articles'
].concat(articleData)//追加 }else{ wx.showToast({ title: '暫無更多內容', icon: 'loading', duration: 2000 }) } }else{ sectionData[currentSectionIndex]['articles'] = articleData//重新整理 }

 這樣就不需要分開寫2種請求程式碼了。當然我們需要新增一個loading動畫,有一點我不明白的是微信把loading動畫當初了元件...只能強行用一個hidden引數來改變它的隱藏和展示狀態,太坑了。
 有同學說不是有showToast嗎?是的,showToast最多可以顯示10秒,雖然理論上是夠了,但是這樣總是很蛋疼,並不能真實地去控制顯示因此。

評論功能

 雖然不打算做發表評論功能了,但是佈局我還是加了上去,效果如圖:


評論效果圖


 評論列表還是用for迴圈渲染每個item即可,當然這邊我添加了一個小細節,當沒有評論的時候會顯示一個空提示:


暫無評論


 只需要一個簡單的if判斷就可以啦:

    <view wx:if="{{commentList}}">
        <view class="comment" wx:for="{{commentList}}">
            <view class="avatar">
                <image src="{{item.avatar}}" mode="scaleToFill"></image>
            </view>
            <view class="commentInfo">
                <view class="userName">{{item.username}}<view class="time">{{item.time}}</view></view>
                <view class="commentContent"><text class="reply" wx:if="{{item.parent_username}}">回覆@{{item.parent_username}}:</text>{{item.content}}</view>
            </view>
        </view>
    </view>
    <view class="noComment" wx:else>
        <text>暫無評論,趕快搶沙發吧!</text>
    </view>
</view>

 這邊還有一個細節是,可以顯示回覆XX。當時在設計後臺的時候允許回覆他人,即評論可以有一個parent_userid欄位,代表你所回覆的這個使用者的id,當然最後伺服器返回的時候會返回使用者名稱。
 所以判斷下wx:if="{{item.parent_username}}" 即可得出該評論是直接評論還是回覆他人的評論。
 其實發表評論的程式碼我也寫了,很簡單就是一個post請求,但是由於無法登陸,並沒有真正去呼叫。

由於微信沒有提供元素獲取功能,所以想要獲取評論框裡的內容不好直接get,只能給輸入框繫結change事件,然後在事件裡把內容複製給一個變數才行。如果有其他方法,歡迎留言指點。

總結開源

 至此,一個小頭條就完成了,當然由於缺失了使用者系統,功能肯定是不完善的,理論上也是毫無用處的。所以真正的小程式產品肯定不應該是純粹的內容展示,互動一定是個很重要的環節。
 我的程式碼可能在很多地方都不夠嚴謹、不夠細緻,大家如果需要參考歡迎訪問Github給個star。
 Github開源地址:https://github.com/winterfeel/Wxapp_Toutiao
 我更享受的是產品的設計過程,所以小程式一定會帶給我很多樂趣。後續我會繼續製作更多小程式,並且釋出一些教程,喜歡的朋友可以繼續關注!
 注:此文為燈燈原創,可轉載,註明出處即可。
 燈燈微信,新增請註明理由。