javascript - 如何在 vue.js 中的项目循环内切换类

标签 javascript vue.js

我是 vue.js 新手,有以下项目列表:

<div class="jokes" v-for="joke in jokes">
    <strong>{{joke.body}}</strong>
    <small>{{joke.upvotes}}</small>
    <button v-on:click="upvote"><i class="fa fa-arrow-up grey"></i></button>
<div>

我想切换 greygreen当用户点击upvote时按钮,以便用户知道她点赞了哪些笑话。

在我有的方法中:

  data () {
    return {
        jokes:[], //filled dynamically by calling backend server
        id: ''

    }
  },

methods: {
    upvote: function(joke) {
        joke.upvotes ++;
        //how to toggle grey to green here?
    }
}

我怎样才能实现这个目标?我尝试了不同的技巧,但所有教程都更改了所有项目的类别,而不是投票的项目。

最佳答案

首先,您需要将笑话传递给该方法。

v-on:click="upvote(joke)"

然后你需要为其添加一个v-class。可以使用 v-bind:class,也可以仅使用 :class。

<div class="jokes" v-for="joke in jokes">
  <strong>{{joke.body}}</strong>
  <small>{{joke.upvotes}}</small>
  <button v-on:click="upvote(joke)"><i class="fa fa-arrow-up" :class="{ green : joke.upvotes>0, grey: joke.upvotes<=0 }"></i></button>
<div>

EXAMPLE HERE

编辑更新。让它只影响您点击的笑话,而不是所有被点赞的笑话。您需要笑话的属性,才能知道您是否选择了它。 所以我们可以说

joke.selected

然后...

<div class="jokes" v-for="joke in jokes">
  <strong>{{joke.body}}</strong>
  <small>{{joke.upvotes}}</small>
  <button v-on:click="upvote(joke)"><i class="fa fa-arrow-up" :class="{green: joke.selected, grey: !joke.selected}"></i></button>
<div>

然后在你的方法中

upvote: function(joke) {
   joke.upvotes++;
   if(!joke.selected){
        joke.selected=true;
   }

}

EXAMPLE HERE

关于javascript - 如何在 vue.js 中的项目循环内切换类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45819668/

相关文章:

javascript - 如何更改Vue上Props的名称?

javascript - VueJS 数据属性在已安装函数中返回未定义

vue.js - Jest +vue : "Cannot find module ....vue"

javascript - Jquery - 使用窗口滚动时抖动滚动

显示所有值的 Javascript 数组

javascript - 背景图像不会淡入

javascript - 更新函数 javascript 和 mongodb

javascript - 页面重定向后 Vuex 状态未保留

html - 带有 svg 的对象标签填充了整个网页

javascript - 如何在 VueJS 中添加显示而不重新渲染整个组件