【问题标题】:Vue.js - I have dynamic buttons and I want that the color changes if I clicked one buttonVue.js - 我有动态按钮,如果我点击一个按钮,我希望颜色会改变
【发布时间】:2020-03-30 15:30:07
【问题描述】:

我已经用 v-for 动态创建了按钮,现在我希望被点击的按钮改变颜色,而另一个按钮的颜色全部相同。

<template>
  <div id="exam-screen" class="exam jumbotron">
    <h1>{{ title }}</h1>
    <div class="row">
      <p class="col-md-6" v-bind:key="exam.id" v-for="exam in getExam">
        <button
          class="exam exam-btn btn btn-secondary btn-lg btn-block"
          v-bind:id="
            'exam-' + exam.id + '-' + exam.season + '-' + exam.year + '-btn'
          "
        >
          <span>{{ exam['season_de'] }} {{ exam.year }} </span>
        </button>
      </p>
    </div>
    <div class="row">
      <p class="col-md-8"></p>
      <BaseButton>{{ startButton }}</BaseButton>
    </div>
  </div>
</template>

我知道我需要一个 v-on:click 指令,但我不知道如何更改颜色...

我已经在 J​​avaScript 中管理过了,但我不知道它在 Vue.js 中是如何工作的......

How I do it in JavaScript:

function selectAnswer(id) {
    $(id).addClass("btn-primary");
    $(id).removeClass("btn-secondary");
}

function deselectAnswer(id) {
    $(id).addClass("btn-secondary");
    $(id).removeClass("btn-primary");
}

我希望有人可以帮助我...

【问题讨论】:

  • 查看这个 Vue 文档 vuejs.org/v2/guide/class-and-style.html
  • 我已经看过了……但不知何故我想不通……我也看过 Vue Mastery 的视频……但我不知道为什么我不现在不明白...
  • 抱歉,演示是什么意思?

标签: javascript html vue.js


【解决方案1】:

您可以使用 @click:class 从按钮中添加和删除类,如下所示:

new Vue({
  el: "#myApp",
  data: {
    items: [{text: 'This is Button 1'},{text: 'This is Button 1'},{text: 'This is Button 3'}]
  },
  methods: {
    toggleClass(index) {
      this.items.forEach(item => item.active=false);
      let item = this.items[index];
      item.active = !item.active;
      this.$set(this.items, index, item);
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet">
<div id="myApp">
  <div v-for="(item, index) in items" :key="index">
    <button 
      :class="{ 'btn-primary': item.active, 'btn-secondary': !item.active}" 
      @click="toggleClass(index)" 
      class="btn btn-md btn-block m-3">
      <span>{{ item.text }} </span>
    </button>
  </div>
</div>

请注意@click 只是v-on:click 的简写,:class 只是v-bind:class 的简写。此外,我们需要删除我们最初为按钮设置的btn-secondary 类,否则btn-primary 不会在单击按钮时生效。

【讨论】:

  • 谢谢。我更改了它,但问题是现在可以选择多个按钮...我希望只能选择一个按钮,然后取消选择其他按钮...这是如何工作的?
  • this.$set(...) 是什么?你能解释一下吗?
  • "我希望只能选择一个按钮,然后取消选择其他按钮" - 我已添加此逻辑。
  • "这是什么。$set" - 你可以在这里了解更多详情Reactivity in Depth
  • 好的。非常感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2017-10-15
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
相关资源
最近更新 更多