首页 > 其他分享 >点赞,取消点赞组件

点赞,取消点赞组件

时间:2022-10-16 15:44:23浏览次数:60  
标签:取消 attitude articleId isLoading 点赞 组件 true

<template>
  <div class="collect-container">
    <van-loading v-if="isLoading" type="spinner" color="#1989fa"></van-loading>
    <van-icon
      v-else
      :color="attitude === 1 ? '#ff0000' : '#777'"
      :name="attitude === 1 ? 'good-job' : 'good-job-o'"
      @click="clickHandler"
    />
  </div>
</template>

<script>
import { addLikeArticleApi, delLikeArticleApi } from "@/api/Article";
export default {
  name: "collectArticle",
  data() {
    return {
      isLoading: false, // 节流阀
    };
  },
  props: {
    // 是否点赞,对文章的态度  1   2
    attitude: {
      type: [String, Number],
      required: true,
    },
    // 文章的 id
    articleId: {
      type: [String, Number],
      required: true,
    },
  },
  methods: {
    async clickHandler() {
      // 判断是否登录了,未登录不允许点击
      if (!this.$store.state.user) return this.$toast.fail("登录后才可以操作");
      // 节流阀 => 开始转圈圈
      this.isLoading = true;
      try {
        if (this.attitude === 1) {
          // 去过已经点赞就取消
          await delLikeArticleApi(this.articleId);
        } else {
          // 如果未点赞就点赞
          await addLikeArticleApi({
            target: this.articleId,
          });
        }
        // 更新视图(按钮的状态)
        // vue 是单向数据流传递
        const newNum = this.attitude === 1 ? 0 : 1;
        this.$emit("changeAttitude", newNum);
      } catch (error) {
        console.log({ error });
        this.$toast.fail("操作失败");
      }
      this.isLoading = false;
    },
  },
};
</script>

<style>
</style>

父组件传值 :

   <!-- 点赞组件 likeArticle -->
          <likeArticle
            :article-id="articleInfo.art_id"
            :attitude="articleInfo.attitude"
            @changeAttitude="articleInfo.attitude = $event"
          ></likeArticle>

标签:取消,attitude,articleId,isLoading,点赞,组件,true
From: https://www.cnblogs.com/zhulongxu/p/16796307.html

相关文章

  • 收藏文章组件
      组件:collectArticle<template><divclass="collect-container"><van-loadingv-if="isLoading"type="spinner"color="#1989fa"></van-loading><va......
  • v-model 语法糖-在父子组件传值 的简写形式
    props的变量名字必须是 value,this.$emit('input',数据值)的自定义事件必须是input;v-model 是vue中进行数据双向绑定的指令,在内部实际上是通过语法糖来完成数据......
  • 关于自定义事件父子组件传值问题 $event
    1.$event是vue提供的特殊变量,用来表示原生的事件参数对象event1.1在原生事件中,$event是事件对象可以点出来属性 2.在原生事件中,$event是事件对象,在自定义事件中,$ev......
  • 关注作者 ,取消关注作者
    使用场景:登录,一直点击登录按钮,发送了很多的请求;抢购;关注,取消关注行为; 操作多次,必须要等待请求结果后在执行下一次解决办法:节流;设置变量isLoading控制发送请求的......
  • 序列化组件
    序列化组件的三大功能序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器......
  • 生成订单30分钟未支付,则自动取消,该怎么实现?
    了解需求方案1:数据库轮询方案2:JDK的延迟队列方案3:时间轮算法方案4:redis缓存方案5:使用消息队列了解需求在开发中,往往会遇到一些关于延时任务的......
  • 02应用和组件
    1<!doctypehtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"6content="width=device-width,user-sca......
  • 兄弟组件传值
    https://www.bilibili.com/video/BV1Hu411r7dt/?spm_id_from=333.337.search-card.all.click&vd_source=d87a0cdb006a04b60ce265a9ce85d6afeventBus可以在全局定义......
  • restframework分页组件的应用
    restframework中提供了优秀的分页组件在settings.py中,填写关于restframework的配置REST_FRAMEWORK={"UNAUTHENTICATED_USER":None,"PAGE_SIZE":4}1.Pag......
  • Jmeter扩展组件:图形监视器-PerfMon (Servers Performance Monitoring)
    1、是什么用于监听服务器CPU、IO、网络等各项指标的组件2、如何实现Jmeter​本身不具备该功能,需要下载第三方实现在服务器端安装监听程序,在测试机端安装接收程序监听程序:Ser......