小百科项目---vue实现前端收藏功能代码(简洁易懂)

收藏功能的实现

1.需求

在这里插入图片描述
在这里插入图片描述

2.实现

<!--被收藏的次数-->
<li class="like">
    <span class="iconfont">&#xe663;</span>
    {{ blogData.f_collection_sum }}
</li>
<!--是否被收藏的样式-->
<li class="like" v-model="key">
    <span class="iconfont">
        <i v-if = "!isCollection" class="el-icon-star-off" :key="0" @click="onCollection"></i>
        <i v-else class="el-icon-star-on" :key="1" @click="onCollection"></i>
    </span>
</li>
onCollection(){
    if(this.isCollection){
        //取消收藏
        let params = {};
        let f_special_document_id = localStorage.getItem("f_special_document_id");
        params.f_special_document={
            f_special_document_id:f_special_document_id,
        };
        delSort(params).then(response => {
            if (response.data.httpStatus === 200) {
                this.$notify({
                    title: "成功",
                    message: "取消收藏",
                    type: "success",
                    offset: 100
                });
                this.key = 0; //使用key值区分两种状态的样式
                this.isCollection = false; //待收藏状态
                this.blogData.f_collection_sum -= 1; 收藏数减一            
             } else {
                this.$notify.error({
                    title: "错误",
                    message: response.data.message,
                    offset: 100
                });
            }
        });
    }else{
        //新增收藏
        let params = {};
        let f_special_document_id = localStorage.getItem("f_special_document_id");
        let f_special_document_name = localStorage.getItem("f_special_document_name");
        params.f_special_document={
            f_special_document_id:f_special_document_id,
            f_special_document_name:f_special_document_name,
        }
        addSort(params).then(response => {
            if (response.data.httpStatus === 200) {
                this.$notify({
                    title: "成功",
                    message: "收藏成功",
                    type: "success",
                    offset: 100
                });
                this.key = 1;
                this.isCollection = true;
                this.blogData.f_collection_sum += 1;
            } else {
                this.$notify.error({
                    title: "错误",
                    message: response.data.message,
                    offset: 100
                });
            }
        })
    }
},

3.谨记

只要页面中的代码任一处有逻辑错误或者其他错误时,都会导致收藏样式出现时好时坏的情况,不能只排查实现收藏样式相关代码的错误!!!

之前收藏样式的实现时好时坏,换了各种写法,最后不知道为啥莫名其妙好了,反正暂时没有再出现时好时坏的情况。
今天项目要接近尾声了,在整体测试的时候,发现有的页面收藏样式可用,有的页面需要手动刷新浏览器样式才会更新,f12查看后,发现样式失灵的页面都会报一个错误leghth字段undefined,排查代码后发现只有控制本页面中的评论样式处的代码使用了length字段。

<div class="noComment" v-if="comments.length == 0">还没有评论,快来抢沙发吧!</div>

我在data处定义的comments是一个空数组,即comments:[],然后又发现只有没有评论的页面才会出现收藏样式失效的情况,然后我竟然还去百度了空数组求长度的写法,一度陷入自我怀疑状态,最后发现接口返回的comments是null,根本不是空数组!

<div class="noComment" v-if="comments == null">还没有评论,快来抢沙发吧!</div>

注意:
一个长度为0的数组我们称之为空数组,空数组是一个真正的对象,只是包含元素个数为0。
null数组是一个空引用。
假设一个方法返回一个数组,如果它返回null,则调用方法必须先判断是否返回null,才能对返回数组进一步处理,而如果返回空数组,则无须null引用检查。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值