zoukankan      html  css  js  c++  java
  • 基于vue-cli li列表的显示隐藏

    效果:点击“公告标题”,显示公告内容,点击同一个“公告标题”多次,显示与隐藏切换

    方法一:

    html部分代码:

    <ul class="clist">
       <li v-for="(item,index) in dlist" @click="listClick3(index)" :class="{selected: item.isturn}">
           {{item.title}}
           <div v-for="di in item.data" v-show="item.isturn" @click.stop="">{{di}}</div>
       </li>
    </ul>

    js部分代码:

    data () {
        return {
             dlist: [{
                      title: '公告标题1',data: ['公告内容1']
                  },{
                      title: '公告标题2',data: ['公告内容2']
                  },{
                      title: '公告标题3',data: ['公告内容3']
                  }
              ],
         }
    } ,
    methods: {
         listClick3: function(index){
                var _title = this.dlist[index].title,
                    _data = this.dlist[index].data,
                    _isturn = !this.dlist[index].isturn;
                this.dlist.splice(index,1,{title:_title,data:_data,isturn:_isturn});
         },
    }

    css代码:

        .clist li{
            width: 100%;
            line-height: 30px;
            border: 1px solid #dddddd;
        }
        .clist li>div{
            line-height: 30px;
        }
        .clist li.selected{
            color: red;
        }

    这里有一个问题是为什么我在点击事件里写的方法是用splice,而不是直接this.dlist[index].isturn=!this.dlist[index].isturn呢,毕竟网上百度来的大部分都是这个样子写的,原因就是‘=’号不会触发双向数据绑定,因为我们在dlist声明的时候是数组不是变量,变量可以使用‘=’号,数组是不可以的哦

    方法二:

    html部分代码:

     <ul class="clist">
         <li v-for="(item,index) in dlist" @click="listClick2(index)" :class="{selected: showlist[index]}">
             {{item.title}}
             <div v-for="di in item.data" v-show="showlist[index]" @click.stop="">{{di}}</div>
         </li>
     </ul>

    js部分代码:

    data () {
        return {
               dlist: [{
                      title: '公告标题1',data: ['公告内容1']
                  },{
                      title: '公告标题2',data: ['公告内容2']
                  },{
                      title: '公告标题3',data: ['公告内容3']
                  }
              ],
              showlist: []
        }
    },
    created(){
         for(var i=0;i<this.dlist.length;i++){
              this.showlist.push(false);
         }
    },
    methods:{
        listClick2: function(index){
          this.showlist.splice(index,1,!this.showlist[index]);
        },
    }

    vue的官方文档有提供相应的api和方法:数组更新检测

     根据上述api,使用$set方法进行数据的更改:

    方法三:

    html部分代码:

    <ul class="clist">
       <li v-for="(item,index) in dlist" @click="listClick4(index)" :class="{selected: item.isturn}">
              {{item.title}}
           <div v-for="di in item.data" v-show="item.isturn" @click.stop="">{{di}}</div>
       </li>
    </ul>

    js部分代码:

    data () {
        return {
                 dlist: [{
                      title: '公告标题1',data: ['公告内容1']
                  },{
                      title: '公告标题2',data: ['公告内容2']
                  },{
                      title: '公告标题3',data: ['公告内容3']
                  }
              ],
         }
    },
    created(){
          for(var x in this.dlist){this.dlist.push(false);//不需要用到this.$set(this.dlist,x,false);created是在元素创建之前,那个时候随便改动都可以。不需要用set通知vue
    } }, methods: { listClick4:
    function(index){ this.dlist[index].isturn = !this.dlist[index].isturn; this.$set(this.dlist,index,this.dlist[index]); }, }

    方法四:

    html部分代码:

     <ul class="clist">
        <li v-for="(item,index) in dlist" @click="listClick5(index)" :class="{selected: showlist[index]}">
           {{item.title}}
           <div v-for="di in item.data" v-show="showlist[index]" @click.stop="">{{di}}</div>
        </li>
     </ul>

    javascript部分代码:

    data () {
        return {
                 dlist: [{
                      title: '公告标题1',data: ['公告内容1']
                  },{
                      title: '公告标题2',data: ['公告内容2']
                  },{
                      title: '公告标题3',data: ['公告内容3']
                  }
              ],
        }
    },
    created(){
        for(var x in this.dlist){
            this.showlist.push(false);
          } }, methods:{ listClick5:
    function(index){ this.$set(this.showlist,index,!this.showlist[index]); }, }
  • 相关阅读:
    mysql u root p 等这些常用的参数
    关于类对象大小的 sizeof 计算问题
    sql like用法
    链表队列
    Zend Studio安装教程
    #define和inline 的区别
    ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)
    Ubuntu 10.04下LAMP环境的配置与使用教程
    win7保护视力的电脑设置
    sql between and 用法
  • 原文地址:https://www.cnblogs.com/rachelch/p/9517463.html
Copyright © 2011-2022 走看看