鍍金池/ 問(wèn)答/HTML5  HTML/ 使用vue做類(lèi)似于微信點(diǎn)贊的效果?

使用vue做類(lèi)似于微信點(diǎn)贊的效果?

遇到這么個(gè)問(wèn)題:
如圖:

clipboard.png

多條朋友圈,當(dāng)我點(diǎn)贊時(shí),當(dāng)前的這條朋友圈給我追加用戶(hù),點(diǎn)贊數(shù)量也相應(yīng)地增加,再次點(diǎn)擊點(diǎn)贊時(shí)就是取消點(diǎn)贊也就相應(yīng)地刪除這個(gè)點(diǎn)贊用戶(hù)名字,點(diǎn)贊數(shù)量也相應(yīng)減少。

這個(gè)該怎么做呀??

代碼如下:

<div class="box" v-for="v in data">
                <div class="PerInfo">
                    <img src="../image/pic.png" alt="" v-if="v.headimgurl == '' || v.headimgurl == null || v.headimgurl == undefined">
                    <img :src="v.headimgurl" alt="" v-else>
                    <div class="info">
                        <p>{{v.nickname}}</p>
                        <p>{{v.last_reply_at | getDate}}</p>
                    </div>
                </div>
                <div class="msg container" :class="fold ? 'fold' : 'unfold'" v-if="v.content !== ''">
                    {{v.content}}
                </div>
                <div class="show" @click='handleFold' v-show="fold">展開(kāi)</div>
                <div class="show" @click='handleFold' v-show="!fold">收起</div>

                <div v-if="v.thumb[0].url !== ''">
                    <!-- 一張圖片 -->
                    <div class="cell" v-if="v.thumb.length == '1'">
                        <img :src="v.thumb.url+'?x-oss-process=image/resize,p_50'" alt="">
                    </div>

                    <!-- 九張圖片,當(dāng)為4張圖片時(shí)加樣式名cell4 -->
                    <div class="cell9 cell4" v-if="v.thumb.length == '4'">
                        <div class="item" v-for="item in v.thumb">
                            <img :src="item.url+'?x-oss-process=image/resize,p_50'" alt="">
                        </div>
                    </div>

                    <!-- 九張圖片,當(dāng)為4張圖片時(shí)加樣式名cell4 -->
                    <div class="cell9" v-else>
                        <div class="item" v-for="item in v.thumb">
                            <img :src="item.url+'?x-oss-process=image/resize,p_50'" alt="">
                        </div>
                    </div>
                </div>

                <div class="nav">
                    <div class="share"></div>
                    <div class="love" @click="givePoint(v.id,v.nickname)">{{v.like}}</div>
                    <div class="comment">{{v.rew}}</div>
                </div>

                <div class="reply" v-if="v.like_member && v.rewlist">
                    <div class="lovePerson" v-if="v.like_member">
                        <em></em>
                        <span>{{v.like_member}}</span>
                    </div>
                    <ul class="reply_box" v-if="v.rewlist">
                        <li v-for="(vv, index) in v.rewlist" v-if="index < 5">
                          <div v-if="vv.replier == ''">
                            <div class="lf">
                                <span class="name">{{vv.nickname}}<em>樓主</em>:</span>
                            </div>
                            <div class="lf">{{vv.content}}</div>
                          </div>
                          <div v-else>
                            <div class="lf">
                                <span class="name">{{vv.replier.nickname}}</span>
                                回復(fù)
                                <span class="name">{{vv.nickname}}:</span>
                            </div>
                            <div class="lf">{{vv.content}}</div>
                          </div>
                        </li>
                    </ul>
                    <div class="checkAll" v-if="v.rewlist.length > 5" @click="goDetail(v.id)">查看全部{{v.rewlist.length}}條留言</div>
                </div>
                
            </div>

clipboard.png

點(diǎn)擊點(diǎn)贊事件的函數(shù):

clipboard.png

clipboard.png

在此謝過(guò),麻煩了

回答
編輯回答
野橘

假如你的朋友圈列表的結(jié)構(gòu)是如下:

[{
    author: 'xxx',
    imgList: [],
    time:'',
    commentList:[]
    praiseList:[{
        username: 'XXX',
        userid: ''
    }]
}]

點(diǎn)贊后把當(dāng)前用戶(hù)的{username: 'XXX',userid: ''},push進(jìn)這個(gè)praiseList

v-for上 @click="givePoint(v)"

givePoint(item){
    var praiseIndex = -1
    item.praiseList.forEach((praise,index)=>{//查找我在不在點(diǎn)贊列表里
        if(myid === praise.userid){
            praiseIndex = index
        }
    })
    if(praiseIndex !== -1){//如果在則取消點(diǎn)贊
        item.praiseList.splice(praiseIndex,1)
    }else{//如果不在則點(diǎn)贊
        item.praiseList.push({username: 'XXX',userid: ''})
    }
}

至于點(diǎn)贊數(shù)量就很簡(jiǎn)單了 item.praiseList.length

2018年3月31日 21:50
編輯回答
真難過(guò)

說(shuō)個(gè)思路吧

  1. 組件關(guān)系 : thumb button (對(duì)應(yīng)點(diǎn)贊按鈕部分) thumb pannel(對(duì)應(yīng)顯示點(diǎn)贊用戶(hù)名部分)
  2. 事件觸發(fā) : thumb cancel thumb 可以在共同的父組件內(nèi)處理兩個(gè)事件,進(jìn)行跨組件的數(shù)據(jù)傳遞
  3. 顯示邏輯 : thumb pannel 遍歷一下props 中的用戶(hù)對(duì)象列表就行了
2018年4月23日 06:04