二级列表,怎么给子列表添加class

forGit
  • 156

1.点击一级菜单展开二级列表,然后点击子列表添加class,现在点击添加两个list中的子项都会添加class,具体看预览。

https://jsfiddle.net/forheyin...

回复
阅读 2.5k
2 个回答
<script src="//unpkg.com/vue/dist/vue.js"></script>
<div id="app">
<ul class="list">
                <li v-for="(i,index1) in alInfo" class="son">
                  <p>
                    <span  @click="i.isA = !i.isA">个人常用短语(点击展开)</span>
                  </p>
                  <ul v-show="i.isA">
                    <li v-for="(s, index2) in i.list"  @click="tInfo(s, index1 ,index2)" :class="[acts == index1 + ',' + index2 ? 'active' : '']">
                      <p>点我就我加class,其它不能加</p>
                    </li>
                  </ul>
                </li>
              </ul>
</div>
var Main = {
    data() {
      return {
      act:0,
      acts: -1,
      isAll: true,
      alInfo: [],
      isAct: false
      }
    },
    created () {
        let test = [{name: 1,list:[{son: 1},{sons: 1}]}, {name: 2,list:[{son: 2},{sons: 2}]}]
      test.forEach(a => { a.isA = false })
      test.forEach(a => {
        a.isA = false
        a.list.forEach(b => {
          b.isA = false
        })
      })
      this.alInfo = test
      console.log(this.alInfo)
    },
    methods: {
       tInfo (s, index1, index2) {
        s.isA = !s.isA
        this.acts = index1 + ',' + index2
      }
    }
  }
var Ctor = Vue.extend(Main)
new Ctor().$mount('#app')
spencerht
  • 7.8k

你不能通过一个值acts去判断两个列表下的属性。
正确的做法应该是
<li v-for="(s, index2) in i.list" @click="tInfo(s, index2)" :class="[s.acts == index2 ? 'active' : '']">

tInfo (s, index2, index1) {
    s.isA = !s.isA
    this.alInfo[index1].list[index2].acts = index2
}

通过二维数组中的确切对象的属性,比如acts去判断。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏