首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在v-for中单击选定的启动带Vue卡的边框变体

如何在v-for中单击选定的启动带Vue卡的边框变体
EN

Stack Overflow用户
提问于 2022-04-07 20:47:16
回答 2查看 491关注 0票数 1

我的b-cardv-for的显示和功能基本上都是按需要运行的,我遇到的一个问题是更改所选卡的边框变体。到目前为止,我已经尝试嵌套v-因为它位于div容器中的卡中,然后使用v-if来检查是否选择了一张卡。此代码以我想要的方式更改边框变体,但我只希望所选的卡更改其边框变体。如上文所述,代码如下所示。

代码语言:javascript
复制
<div v-for="(team, index) in teams" :key="index">
    <b-card
        v-if="selected"
        img-src="https://picsum.photos/600/300/?image=25"
        img-alt=""
        v-model="selected"
        border-variant="success"
        img-bottom
        no-body
        class="mb-4 mr-4"
        body-class="text-center"
        >
            <b-row class=" my-2" align-h="center"> 
                <b-link  @click="functionThatChangesColorAndDoesOtherStuff(stuff)"><b-icon icon="plus-circle" font-scale="2.5"></b-icon></b-link>
            </b-row>
    </b-card>

    <b-card
        v-else
        img-src="https://picsum.photos/600/300/?image=25"
        img-alt=""
        v-model="selected"
        img-bottom
        no-body
        class="mb-4 mr-4"
        body-class="text-center"
        >
            <b-row class=" my-2" align-h="center"> 
                <b-link  @click="functionThatChangesColorAndDoesOtherStuff(stuff)"><b-icon icon="plus-circle" font-scale="2.5"></b-icon></b-link>
            </b-row>
    </b-card>
</div>

selected属性位于我的data()上,我有一个函数,我们将在该函数中调用functionThatChangesColorAndDoesOtherStuff(),在该函数中切换所选的属性。该方法的代码如下所示

代码语言:javascript
复制
data() {
    return {
        teams: [],
        selected: false
    }
}
代码语言:javascript
复制
 functionThatChangesColorAndDoesOtherStuff(stuff) {
    this.selected = !this.selected
    \\\Business logic below that does business stuff with the stuff
 }

我也尝试使用v-for中的索引,但这甚至没有使我达到颜色变化的程度。这使我认为我没有正确地使用它,我想要一些帮助,我如何才能实现这一效果。我已经检查过了,但还没有看到类似于我的情况的例子,我将再次重申。我想点击加号按钮,并有选择的卡的边界变体变化。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-07 21:14:15

请看下面的代码片段:您可以像::border-variant="selected === index ? 'success' : 'danger'"那样绑定边框,并将索引传递给函数。

代码语言:javascript
复制
new Vue({
  el: '#demo',
  data() {
    return {
      teams: [1,2,3],
      selected: []
    }
  },
  methods: {
    functionThatChangesColorAndDoesOtherStuff(idx) {
      if (this.selected.includes(idx)) {
        this.selected = this.selected.filter(s => s !== idx)
      } else this.selected.push(idx)
    }
  }
})
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css" />
<script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script>
<script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue-icons.min.js"></script>
<div id="demo">
  <div v-for="(team, index) in teams" :key="index">
    <b-card
      img-src="https://picsum.photos/600/300/?image=25"
      img-alt=""
      v-model="selected"
      :border-variant="selected.includes(index) ? 'success' : 'danger'"
      img-bottom
      no-body
      class="mb-4 mr-4"
      body-class="text-center"
      >
      <b-row class=" my-2" align-h="center"> 
        <b-link  @click="functionThatChangesColorAndDoesOtherStuff(index)"><b-icon icon="plus-circle" font-scale="2.5"></b-icon></b-link>
      </b-row>
    </b-card>
  </div>
</div>

票数 1
EN

Stack Overflow用户

发布于 2022-04-07 21:01:30

首先,不要仅仅对类名使用v-if和v- the,而是使用以下方法

代码语言:javascript
复制
:class=" selected ? 'className1' : 'className2' "

第一个价值必须是一个真实的价值。下面是将根据值应用的类名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71788726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档