【问题标题】:All buttons effect only the first button, but not themselves所有按钮只影响第一个按钮,而不影响它们本身
【发布时间】:2021-07-22 09:56:14
【问题描述】:

card.vue 是带有 toggleLike 方法和按钮标签的模板

<template>
  <div
    class="p-24 grid grid-cols-1 sm:grid-cols-1 md:grid-cols-3 lg:grid-cols-3 xl:grid-cols-3 gap-12"
  >
    <div
      v-for="movie in movies"
      :key="movie.imdbID"
    >
      <card :movieData="movie" />
    </div>
  </div>
</template>

我有动态生成的按钮,但无论我单击哪个按钮,每次第一个按钮被“选中”或取消选中(取决于其先前的状态)。 我想独立切换它们。

<button  @click="toggleLike()" class="mr-2">
        <i id="but" class="fa-thumbs-up" :class="{ fas: isLiked, far: !isLiked }"></i>
 toggleLike() {
      if(this.movieData.likes == 0) {
          $('#but').removeClass('far');
        $('#but').addClass('fas');
                this.movieData.likes+1;
        }
        else {
          $('#but').removeClass('fas');
        $('#but').addClass('far');}
      return this.$store.dispatch("updateMovieLikes", {
        imdbID: this.movie.imdbID,
      });
    },

【问题讨论】:

    标签: javascript html jquery vue.js button


    【解决方案1】:

    您应该添加更多代码来说明如何构建生成的按钮,这是一个数组吗?如果是,那么您的 isLiked 应该是一个数组

    <div v-for="movie in movies">
      <button  @click="toggleLike(movie)" class="mr-2">
        <i id="but" class="fa-thumbs-up" :class="movie.likes === 0 ? 'fas' : 'far'"></i>
      </button>
    </div>
    
    
    methods: {
      toggleLike(movie) {
        movie.likes = movie.likes === 0 ? 1 : 0;
    
        this.$store.dispatch("updateMovieLikes", {
          imdbID: this.movie.imdbID,
        });
      }
    }
    
    

    编辑:只是提示您在 vue 中不需要 jquery

    【讨论】:

      【解决方案2】:

      欢迎来到 SO,您实际上可以从 jquery 转移到 vue。您已经在 but 元素上进行了动态类绑定,因此您可以删除 method 上的 jquery 类处理。

      模板:

      <button @click="toggleLike()" class="mr-2">
              <i class="fa-thumbs-up" :class="isLiked ? 'fas' : 'far'"></i>
      </button>
      

      方法:

      toggleLike() {
        // Add here how you handle the toggling of isLiked data
        
        if (this.movieData.likes === 0) this.movieData.likes++;
        
        return this.$store.dispatch("updateMovieLikes", {
          imdbID: this.movie.imdbID,
        });
      },
      

      注意。

      我不确定你是如何动态生成按钮的,你能在你的问题上展示它吗? (还不能评论)。您还应该展示如何处理 isLiked 数据的切换。

      【讨论】:

      • 我需要它来显示按钮是否被点击
      • 你指的是jquery吗?您可以在 toggleLike() 方法上处理它。您可以编辑您的问题以显示更结构化的代码,以便我们更好地指导您。
      • 我相信按钮是用 v- for 循环生成的,因为它们是名为 card.vue 的模板的一部分
      猜你喜欢
      • 2020-10-28
      • 1970-01-01
      • 2019-09-18
      • 2017-06-02
      • 2018-06-28
      • 1970-01-01
      • 2018-02-04
      • 2013-06-26
      • 1970-01-01
      相关资源
      最近更新 更多