(十八)、首页点赞高亮显示的功能实现【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

news2025/3/1 1:45:28

1,首页点赞高亮显示的逻辑

思路:首先,查询所有在首页index页面中展示的文章id,存为一个id数组;然后利用dbcloud command命令和文章id数组,统一查询文章点赞表;其中加上两个筛选条件(1,点赞表中的文章id如果存在于文章id数组中,2,点赞表中的用户id为当前登录用户id)。

1.1,首页中引入如下代码:
<script>
  import {
    store,
    mutations
  } from '@/uni_modules/uni-id-pages/common/store.js'
  const db = uniCloud.database();
  const dbCmd = db.command;
  
...其他代码省略
1.2 修改获取数据方法:
//获取首页列表数据
      getData() {
        let artTemp = db.collection("quanzi_articles").where(`delState != true`).field(
          "title,user_id,description,picurls,comment_count,like_count,view_count,publish_date").getTemp();
        let userTemp = db.collection("uni-id-users").field("_id,username,nickname,avatar_file").getTemp();
        db.collection(artTemp, userTemp).orderBy(this.navlist[this.navAction].type, "desc").get()
          .then(async res => {
            // console.log(res)
            let idArr = []
            let resDataArr = res.result.data

            if (store.hasLogin) {
              resDataArr.forEach(item => {
                idArr.push(item._id);
              })

              let likeRes = await db.collection("quanzi_like").where({
                article_id: dbCmd.in(idArr),
                user_id: uniCloud.getCurrentUserInfo().uid
              }).get()

              console.log(likeRes)
            }

            this.dataList = resDataArr
            // 骨架屏消失
            this.loadState = false
          })
      },

输出结果:
在这里插入图片描述

2,数组比对查询出点赞的列表进行高亮显示

2.1,点赞表中的文章id 与 文章表联表用户表中的文章id,两个结果数组做对比,找出文章表中点过赞的索引。
              likeRes.result.data.forEach(item => {
                let findIndex = resDataArr.findIndex(find => {
                  return item.article_id == find._id
                })
                console.log(findIndex)
                resDataArr[findIndex].isLike = true
              })
2.2,点过赞的索引输出:

在这里插入图片描述

2.3,在blog-item页面中添加如下代码:
 :class="item.isLike ? 'active' : ''"
      <!-- 点赞量 -->
      <view class="box" :class="item.isLike ? 'active' : ''" @click="goDetail">
        <text class="iconfont icon-a-106-xihuan"></text>
        <text>{{item.like_count ? item.like_count : '点赞'}}</text>
      </view>
2.4,效果:

在这里插入图片描述

3,实现无感点赞功能

3.1,blog-item页面中点赞盒子中加上点赞样式

添加点赞方法clickLike:

      <!-- 点赞量 -->
      <view class="box" :class="item.isLike ? 'active' : ''" @click="clickLike">
        <text class="iconfont icon-a-106-xihuan"></text>
        <text>{{item.like_count ? item.like_count : '点赞'}}</text>
      </view>
3.2,引入pagejson、store和tools公共类方法:
  import pageJson from "@/pages.json"
  import {
    giveName,
    giveAvatar,
    likeFun
  } from "../../utils/tools.js"
  import {
    store
  } from '@/uni_modules/uni-id-pages/common/store.js'
3.3,添加点赞方法:
      //点赞操作
      clickLike() {
        if (!store.hasLogin) {
          uni.showModal({
            title: "登录后才可进行后续操作",
            success: res => {
              if (res.confirm) {
                uni.navigateTo({
                  url: "/" + pageJson.uniIdRouter.loginPage
                })
              }
            }
          })
          return;
        }

        let time = Date.now();
        if (time - this.likeTime < 2000) {
          uni.showToast({
            title: "操作太频繁,请稍后...",
            icon: "none"
          })
          return;
        }
        this.likeTime = time;

        let like_count = this.item.like_count;
        this.item.isLike ? like_count-- : like_count++
        //this.item.isLike = !this.item.isLike;
        let isLike = !this.item.isLike;

        this.$emit("update:isLike", isLike)
        this.$emit("update:like_count", like_count)

        likeFun(this.item._id);

      },
      //单击图片
      clickPic(index) {
        uni.previewImage({
          urls: this.item.picurls,
          current: index
        })
      },

在index页面中修改代码如下:

    <!-- 公共组件 博客内容 -->
    <view class="content">
      <view class="item" v-for="item in dataList">
        <blog-item @delEvent="P_delEvent" :item="item" :isLike.sync="item.isLike" :like_count.sync="item.like_count">
        </blog-item>
      </view>
    </view>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/361052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里巴巴内网 Spring Cloud Alibaba 强势来袭,开创微服务的新时代

Spring Cloud 发展史 Spring Cloud 从 15 年的 3 月份推出之后&#xff0c;迅速在 Java 微服务生态中&#xff0c;成为开发人员的首选技术栈。 Spring Cloud 在 Spring Boot 的基础上&#xff0c;保留 Java 开发习惯&#xff0c;加入分布式特性&#xff0c;提供了一系列通用工…

0/1 nodes are available: 1 node(s) didn‘t match Pod‘s node affinity.

主要是需要确认你的yaml文件中是否有nodeSelector的配置&#xff0c;一般是因为k8s集群中没有相应的node节点匹配导致 这个错误消息表明您正在尝试在不符合Pod的节点亲和性规则的节点上运行Pod。这通常是由于节点选择器或节点亲和性规则设置不正确引起的。 以下是一些可能导致…

接口服务熔断方案

一.熔断方式1.中间件支持熔断2.支持节点级熔断2.支持url前缀匹配二.配置1.延迟方式expression "LatencyAtQuantileMS(50.0) > 100"//50%延迟超过100ms2.失败率方式expression "NetworkErrorRatio() > 0.30" //失败率超过30%3.组合方式expression …

9、GPT-1-2-3

GPT GPT系列即基于Transformer Decoder实现的预训练语言模型&#xff0c;在各类复杂的NLP任务中都取得了不错的效果&#xff0c;如文章生成、代码生成、机器翻译&#xff0c;Q&A等。 对于一个新的任务&#xff0c;GPT仅仅需要非常少的数据便可以理解该任务&#xff0c;并…

改进YOLO系列 | 谷歌团队 | CondConv:用于高效推理的条件参数化卷积

CondConv:用于高效推理的条件参数化卷积 论文地址:https://arxiv.org/pdf/1904.04971.pdf 代码地址:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/condconv 卷积层是现代深度神经网络的基本构建模块之一。其中一个基本假设是,卷积核应该对数…

网络层协议

目录 MAC地址 前言 相关命令 IP地址 IPV4与IPV6 IPV6注意事项 IPV4 IPV4的10进制形式转化为2进制 IP地址的组成 子网掩码 网络地址与广播地址 子网掩码的CIDR的表示方法 子网掩码的使用 IP地址的分类&#xff08;IPV4为例&#xff09; 公有地址与私有地址 前言…

网络模型、网络连接

网络模型、网络连接网络模型OSI模型&#xff1a;应用层表示层会话层传输层网络层数据链路层物理层网络连接Socket(套接字)流套接字&#xff08;sock_stream&#xff09;数据报套接字(sock_dgram)原始套接字&#xff08;sock_raw&#xff09;网络模型 OSI模型&#xff1a; 百度…

Kroger EDI 855 采购订单确认报文详解

本文着重讲述Kroger EDI项目中&#xff0c;供应商发给Kroger的X12 855EDI 规范报文&#xff08;采购订单确认&#xff09;解读。 在此前的文章如何读懂X12报文中&#xff0c;我们对X12已经做了详细的介绍&#xff0c;大家可以以此为基础&#xff0c;深入了解855采购订单确认报…

CMake构建工具使用教程

1.简介 CMake是一个开源的、跨平台的C构建工具&#xff0c;通过平台和编译器无关的配置文件来声明构建目标&#xff0c;支持Make、ninja、MSBuild等多种底层构建工具&#xff0c;大多数IDE&#xff08;例如CLion、Visual Studio、Visual Studio Code等&#xff09;也都支持CMa…

【ZOJ 1067】Color Me Less 题解(vector+开方)

问题 颜色缩减是从一组离散颜色到较小颜色的映射。这个问题的解决方案需要在标准的24位RGB颜色空间中执行这样的映射。输入由十六个RGB颜色值的目标集合和要映射到目标集合中最接近的颜色的任意RGB颜色集合组成。为了我们的目的&#xff0c;RGB颜色被定义为有序三元组&#xff…

OpenGL ES 绘制一张图片

GLSL 语法与内建函数 GLSL 的修饰符与数据类型 GLSL 中变量的修饰符 const&#xff1a;修饰不可被外界改变的常量attribute&#xff1a;修饰经常更改的变量&#xff0c;只可以在顶点着色器中使用uniform&#xff1a;修饰不经常更改的变量&#xff0c;可用于顶点着色器和片段…

vue中go.js的使用教学(五:数据绑定)

一、一个简单的数据绑定&#xff08;go.Binding&#xff09;看注释为绑定 diagram.nodeTemplate $(go.Node, "Auto",$(go.Shape, "RoundedRectangle",{ fill: "white" },new go.Binding("fill", "color")), // shape.fill …

Nginx 部署 Vue 项目以及 Vue 项目刷新出现 404 的问题(完整步骤)(亲测有效)

Nginx 部署 Vue 项目以及 Vue 项目刷新出现 404 的问题&#xff08;完整步骤&#xff09;&#xff08;亲测有效&#xff09; 1.流程步骤&#xff08;本教程下载的是1.20.2版本&#xff0c;放在D盘&#xff09; 1-1. 首先去官方下载 nginx &#xff0c;然后在当前目录下创建ht…

大幅提升爬取效率的一款实用工具

在做爬虫的时候&#xff0c;我们往往可能这些情况&#xff1a;网站比较复杂&#xff0c;会碰到很多重复请求。有时候爬虫意外中断了&#xff0c;但我们没有保存爬取状态&#xff0c;再次运行就需要重新爬取。还有诸如此类的问题。那怎么解决这些重复爬取的问题呢&#xff1f;大…

什么国产蓝牙耳机颜值高又好用?好用且高颜值蓝牙耳机推荐

随着蓝牙耳机的受欢迎程度加深&#xff0c;其受众群体也越来越多样。什么国产蓝牙耳机颜值高又好用&#xff1f;针对这个问题&#xff0c;我来给大家推荐几款好用且颜值高的蓝牙耳机&#xff0c;可以当个参考。 一、南卡小音舱蓝牙耳机 参考价&#xff1a;239 蓝牙版本&…

Go进阶(3):上下文context

一、背景 在 Go http包的Server中&#xff0c;每一个请求在都有一个对应的 goroutine去处理。请求处理函数通常会启动额外的goroutine用来访问后端服务&#xff0c;比如数据库和RPC服务。一个上游服务通常需要访问多个下游服务&#xff0c;比如终端用户的身份认证信息、验证相关…

【网工最关心的问题,看Chat GPT怎么回答?】

最近打开微信群聊&#xff0c;都是在说ChatGPT相关内容 那ChatGPT是什么&#xff1f; ChatGPT是由美国人工智能实验室OpenAI开发的一个对话AI模型&#xff0c;于2022年11月正式推出。它因其极其出色的文本生成和对话交互能力在世界范围内迅速走红&#xff0c;五天内用户破百万&…

19岁就患老年痴呆!这些前兆别忽视!

在大部分人的印象中&#xff0c;阿尔兹海默症好像是专属于老年人的疾病&#xff0c;而且它的另一个名字就是老年痴呆症。然而&#xff0c;前不久&#xff0c;一位19岁的男生患上了阿尔兹海默症&#xff0c;是迄今为止最年轻的患者。这个男生从17岁开始&#xff0c;就出现了注意…

return和finally执行顺序、运行时异常与一般异常异同、error和exception区别、Java异常处理机制原理与应用

文章目录1.try {}里有一个return语句&#xff0c;那么紧跟在这个try后的finally{}里的code会不会被执行&#xff0c;什么时候被执行&#xff0c;在return前还是后?2.运行时异常与一般异常有何异同&#xff1f;3.java 程序中的错误有三种类型分别是什么4.error和exception有什么…

GitHub推送报错:You‘re using an RSA key with SHA-1, which is no longer allowed

文章目录1、问题描述2、解决方案&#xff1a;重新生成密钥对3、将生成的公钥添加到GitHub4、向GitHub推送代码测试1、问题描述 在向GitHub推送代码的时候&#xff0c;执行git push命令出现如下问题&#xff1a; 原因是github不再支持RSA算法生成的密钥了&#xff0c;我们需要重…