删除所有项目的类并将类添加到 Vue.js 中的单击项目

Posted

技术标签:

【中文标题】删除所有项目的类并将类添加到 Vue.js 中的单击项目【英文标题】:Remove Class for All Items and Add Class to Clicked Itemin Vue.js 【发布时间】:2019-04-08 11:53:35 【问题描述】:

所以,我只知道如何在 vanilla JS 中执行此操作,如果我有一个事物列表并希望一次激活一个项目,我会从列出的所有项目中删除该类并添加它到被点击的那个。不幸的是,我似乎无法在 Vue.js 中弄清楚,因为我还在学习它。我想为单击的元素触发一个名为“activeComp”的变量为真,并为所有其他单击的元素设置为假,因此一次只有一个项目处于活动状态。截至目前,它允许我一次选择一个,但该课程仍保留在其他课程上。这是我的代码:

<div v-if="companions.length > 0" v-for="companion in companions">

  <comp-item :companionData="companion"></comp-item>

</div>



<template>

  <div class='companion-item' @click="toggleActive" :class=" active: activeComp ">
    <h3> companionData.name  <span class='desc'>( companionData.desc )</span></h3>
  </div>

</template>

<script>
  export default 
    props: ['companionData'],
    data() 
      return 
        activeComp: false
      ;
    ,
    methods: 
      toggleActive() 
        this.activeComp = !this.activeComp;
      
    
  
</script>

非常感谢您对此的任何帮助。

【问题讨论】:

【参考方案1】:

由于一次只有 1 个活动项,您应该跟踪父组件中的当前活动项:

<div 
  v-if="companions.length > 0" 
  v-for="(companion, index) in companions" 
  :key="index">
  <comp-item :companionData="companion" 
             :isActive="activeIndex === index" 
             @onToggle="onToggle(index)">
  </comp-item>
</div>

<script>
  ...
    data() 
      return 
        activeIndex: null
      ;
    ,
    methods: 
      onToggle(index) 
        if (this.activeIndex === index) 
          this.activeIndex = null;
         else 
          this.activeIndex = index;
        
      
    
    ...
</script>

然后在子组件中,您可以向父组件发出点击事件:

<template>

  <div class='companion-item' @click="toggleActive" :class=" active: isActive ">
    <h3> companionData.name  <span class='desc'>( companionData.desc )</span></h3>
  </div>

</template>

<script>
  export default 
    props: ['companionData', 'isActive'],
    data() 
      return 
      ;
    ,
    methods: 
      toggleActive() 
        this.$emit('onToggle')
      
    
  
</script>

当用户点击一个项目时,事件将被发送到父级并在onToggle 方法中处理。

【讨论】:

太棒了,工作得很好!谢谢,感谢您的帮助! 这个答案不仅有帮助,还教会了我解决问题的新方法。谢谢。

以上是关于删除所有项目的类并将类添加到 Vue.js 中的单击项目的主要内容,如果未能解决你的问题,请参考以下文章

如何删除所有项目并将新项目添加到 UICollectionView?

Vue.js - 将类添加到单击的按钮

Vue.js - 将类添加到单击的按钮

如何使用jquery获取以值开头的类并将事件添加到每个类中的复选框[关闭]

vue.js实现完整购物车实例

Ruby中的类和该类的单例有啥区别?