v-for产生的列表。用v-bind绑定属性,如何实现active的切换

如题,我想实现点击某个li时,添加active效果,别的为默认样式;当点击另一个是,原来的active回去默认样式。用vue该如何实现?

我的代码如下,但是会全部一起被加上或移除active

    <ul class="controller-checkboxs clearfix" >
            <li v-on:click="clicked=!clicked" class="controller-checkbox-item" v-bind:class="clicked?'active':''" v-for="ctrlValue in desc.args">
                    <a>{{ctrlValue}}</a>
            </li>
    </ul>

clipboard.png

点击后:
clipboard.png

阅读 4.4k
4 个回答
<ul class="controller-checkboxs clearfix" >
    <li v-on:click="currentIndex = index" class="controller-checkbox-item" v-bind:class="{clicked: index === currentIndex}" v-for="(ctrlValue, index) in desc.args">
                    <a>{{ctrlValue}}</a>
    </li>
</ul>
data(){
    return{
        currentIndex: 0
    }
}

通过遍历序号进行判定即可

回來看一下才看清楚不是要多選而是單選,改了下:

看起來你好像把狀態寫成使用同一個變量...

應該是要把狀態定義在每個 desc.args

data() {
  return {
    desc: {
       args: [
          {
            selected: false
            // ...略  
          }
       ]
    }
  }
},
methods: {
  select(index) {
    this.desc.args.map( a => a.selected = false )
    this.desc.args[index].selected = true
  }
}
<li @click="select(index)" class="controller-checkbox-item" :class="ctrlValue.selected ? 'active' : ''" v-for="(ctrlValue, index) in desc.args">
    <a>{{ctrlValue}}</a>
</li>

大致上是這樣。

推荐问题