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

方法一:

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]);
},
}

基于vue-cli li列表的显示隐藏的更多相关文章

  1. 前端基于VUE的v-charts的曲线显示

    目录 前端基于VUE的v-charts的曲线显示 1. 应用背景 2. 分析数据生产者生成 3. 取出数据消费者 4. 前端显示 4.1 安装V-charts插件 4.2 引入veline曲线插件 4 ...

  2. jQuery入门——实现列表的显示隐藏与实现轮播图

    列表的显示与隐藏 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head& ...

  3. 基于jquery封装通用的控制显示隐藏的方法

    应用场景 在项目中会存在大量这样的需求: 1.选择不同的radio单选框,页面上的部分内容随之显示隐藏 2.选择不同的option下拉框内容,页面上的部分内容随之显示隐藏 如果每次遇到这类需求都单独写 ...

  4. 基于vue cli 3.0创建前端项目并安装cube-ui

    前提条件: 安装node.js. 国内的开发者最好先配置淘宝镜像. 之后用cnpm来代替npm命令. 项目创建过程: 打开cmd,输入命令进入目标工作空间,以本机项目为例: cd /d d: cd D ...

  5. 基于@vue/cli 的构建项目(3.0)

    1.检测node的版本号 注意:1.Vue CLI需要Node.js的版本 8.9+(推荐8.11.0+) 所以在安装Vue CLI之前先看下node的版本 node -v 2.安装@vue/cli ...

  6. 基于Vue cli生成的Vue项目的webpack4升级

    前面的话 本文将详细介绍从webpack3到webpack4的升级过程 概述 相比于webpack3,webpack4可以零配置运行,打包速度比之前提高了90%,可以直接到ES6的代码进行无用代码剔除 ...

  7. 基于vue的滚动条组件之--element隐藏组件滚动条scrollbar使用

    在项目中,总是需要用到滚动条,但windows浏览器默认的滚动条是很丑的,为了页面美观,可以考虑优化滚动条样式.  vue Element UI官方文档上并没有放出滚动条相关的示例说明,但是实际上是有 ...

  8. Vue CLI 3+tinymce 5富文本编辑器整合

    基于Vue CLI 3脚手架搭建的项目整合tinymce 5富文本编辑器,vue cli 2版本及tinymce 4版本参考:https://blog.csdn.net/liub37/article/ ...

  9. 基于vue现有项目的服务器端渲染SSR改造

    前面的话 不论是官网教程,还是官方DEMO,都是从0开始的服务端渲染配置.对于现有项目的服务器端渲染SSR改造,特别是基于vue cli生成的项目,没有特别提及.本文就小火柴的前端小站这个前台项目进行 ...

随机推荐

  1. 配置GIT DIFF/MERGE TOOL

    关闭prompt backup git config --global difftool.prompt false git config --global mergetool.prompt false ...

  2. xml与java代码相互装换的工具类

    这是一个java操作xml文件的工具类,最大的亮点在于能够通过工具类直接生成xml同样层次结构的java代码,也就是说,只要你定义好了xml的模板,就能一键生成java代码.省下了自己再使用工具类写代 ...

  3. Linux下软件常见安装方式

    pasting  分类: Linux2007-12-08 16:31 1909人阅读 评论(0) 收藏 举报 linuxredhat脚本文档managerfile        Linux下软件安装主 ...

  4. Maven及POM文件

    Maven Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Logback是由LOG4创始人设计的又一个开源日志组件. 相关链接: Ma ...

  5. 敏捷开发之XP

    敏捷方法论有一个共同的特点,那就是都将矛头指向了“文档”,它们认为传统的软件工程方法文档量太“重”了,称为“重量级”方法,而相应的敏捷方法则是“轻量级”方法.正是因为“轻量级”感觉没有什么力量,不但不 ...

  6. C# 生成dll文件 并导入使用

    首先 在unity创建一个脚本 并编写内容,其中需要调用的方法.变量要公有化(也可以直接新建cs文件用编译器打开编译,但要先导入UnityEngine.dll). 然后,复制脚本关闭unity,在外界 ...

  7. 练习题。对DOM中document的深刻理解巩固

    //window.onload = modTwo;     1.点击单元格内容  弹窗promrt接收值   将接受的值提换单元格内容    2.点击单元格  出现2个按钮 加粗 字体颜色标红     ...

  8. CSS选择器与jQuery选择器的异同:一些特殊的选择器

    在CSS3选择器标淮草案定义的选择器语法中,jQuery支持相当完整的一套子集,同时还添加了一些非标准但很有用的伪类.下面是一些jQuery扩展的选择器:(来自http://www.cnblogs.c ...

  9. ref 和 out 的用法和区别以及params用法

    方法参数可以划分为一下四种类型1 值参数:声明时不含任何修饰符2 引用参数:以ref修饰符声明3 输出参数:以out修饰符声明4 参数数组:以params修饰符声明 引用参数和输出参数不创建新的存储位 ...

  10. 《Beginning Java 7》 - 5 - Hash Codes 哈希码

    哈希码和 equals() 都是用来比较的. 1. 哈希码的作用是用来提高比较的效率.因为当比较的对象比较复杂时,equals() 可能很耗时,但哈希码只需要比较一个 int .哈希码常用于集 (se ...