Vue.js:使用方法切换动态数据的CSS类

w41d8nur  于 2022-11-30  发布在  Vue.js
关注(0)|答案(2)|浏览(807)

下面的代码:

<template>
<div id="projects">
  <Header />
  <b-container>
    <div class="row">
      <div :class="colSize" v-for="(data, index) in projects" :key="data._id">
        <b-card :title="data.name" :sub-title="user.jobresponsibilities">
          <p class="card-text">
            {{data.description}}
          </p>
          <b-btn v-b-toggle="'collapse'+index" @click="showCollapse(data)">Toggle Collapse</b-btn>
          <b-collapse :id="'collapse'+index">
            <b-card>
              description
            </b-card>
          </b-collapse>
        </b-card>
      </div>

    </div>
  </b-container>
</div>
</template>

<script>
import Header from '@/components/Header'
export default {
  name: 'dashboard',
  components: {
    Header
  },
  mounted() {},
  methods: {
    showCollapse(data) {
      this.colSize = 'col-8'
    }
  },
  data() {
    return {
      user: this.$store.getters.getUser,
      projects: this.$store.getters.getProject,
      colSize: 'col-4',
      show: false
    }
  }
}
</script>

<style lang="scss">
#projects {
    background-color: rgb(243, 243, 243);
}
</style>

商店.js:https://jsbin.com/kejinihoci/edit?js

我想要实现的是,当我单击切换按钮时,特定的列大小会改变(css类),并且它只显示此项目的可折叠项,而不显示其他项。
我尝试将ID添加到v-model以将其添加到我的方法中,但没有成功。

shyt4zoc

shyt4zoc1#

您应该执行一些动态操作,例如为每个collapse分配一个唯一的id(id="'collapse'+index"),并在相应的按钮v-b-toggle="'collapse'+index"中使用v-b-toggle指令:

<b-btn v-b-toggle="'collapse'+index" class="m-1">Toggle Collapse</b-btn>
      <b-collapse id="'collapse'+index" >
        <b-card>
          description
        </b-card>
      </b-collapse>

要动态地更改类,应该向projects数组添加一个名为descShown的属性。
storegetProject操作中

let project = resp.data.project
        project=project.map((p)=>{
               p.descShown=false;
               return p;
               })
        commit('getProject_success', {
          project
        })

模板内部:

<div :class="['col-8':data.descShown,'col-6':!data.descShown}" v-for="(data, index) in projects" :key="data._id">

   ...
  <b-btn v-b-toggle="'collapse'+index" @click="showCollapse(index)">

您方法应该如下所示:

showCollapse(index) {
        this.$set(this.projects,index,true);
     }
anauzrmj

anauzrmj2#

这是一个很好的机会来利用vue的构建目的-组件!为你的<b-card>创建一个新的组件,将你需要的属性传递给它。每个组件都有自己的数据和方法集。

<div :class="colSize" v-for="(data, index) in projects" :key="data._id">
    <b-card 
        :cardinfo="{
           data.name,
           user.jobresponsibilities
        }"
    ></b-card>
  </div>
Vue.component('b-card', {
  props: {
    cardinfo: {
        type: Object
    }
  }
}

相关问题