我的b-card和v-for的显示和功能基本上都是按需要运行的,我遇到的一个问题是更改所选卡的边框变体。到目前为止,我已经尝试嵌套v-因为它位于div容器中的卡中,然后使用v-if来检查是否选择了一张卡。此代码以我想要的方式更改边框变体,但我只希望所选的卡更改其边框变体。如上文所述,代码如下所示。
<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(),在该函数中切换所选的属性。该方法的代码如下所示
data() {
return {
teams: [],
selected: false
}
} functionThatChangesColorAndDoesOtherStuff(stuff) {
this.selected = !this.selected
\\\Business logic below that does business stuff with the stuff
}我也尝试使用v-for中的索引,但这甚至没有使我达到颜色变化的程度。这使我认为我没有正确地使用它,我想要一些帮助,我如何才能实现这一效果。我已经检查过了,但还没有看到类似于我的情况的例子,我将再次重申。我想点击加号按钮,并有选择的卡的边界变体变化。
发布于 2022-04-07 21:14:15
请看下面的代码片段:您可以像::border-variant="selected === index ? 'success' : 'danger'"那样绑定边框,并将索引传递给函数。
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)
}
}
})<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>
发布于 2022-04-07 21:01:30
首先,不要仅仅对类名使用v-if和v- the,而是使用以下方法
:class=" selected ? 'className1' : 'className2' "第一个价值必须是一个真实的价值。下面是将根据值应用的类名。
https://stackoverflow.com/questions/71788726
复制相似问题