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

方法一:

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. laravel @if

  2. Hadoop权威指南文摘

    第1章 初识Hadoop 1.1 数据!数据! 1.2 数据的存储与分析 HDFS实现数据的存储,MapReduce实现数据额分析与处理 1.3 相较于其他系统的优势 MapReduce是一个批量查询 ...

  3. django model ValueQuerySet QuerySet 转换成JSON

    这里我有4个字段需要使用外键,那么在调取数据的时候就可以使用两个'_'进行调取,当然条件必须需要从前端传进来 models.py class HostInfo(models.Model): host_ ...

  4. 认证服务号Thinkphp微信支付

    公众号配置 1.微信支付过程中需要获取用户的openid,所以,仍需填写 网页授权域名 2.微信支付授权目录  Thinkphp目录格式为www.xxx.cn/home/wxpay/ 这里目录不能填写 ...

  5. java 集合综述(总结于多位博友)

    http://www.cnblogs.com/shunran/p/3459065.html(good) java集合类主要负责保存.盛装其他数据,因此集合类也称容器类. java集合类分为:set.l ...

  6. Mac上phantomjs装了不能用的解决

    下了,装了.然后整这句命令: phantomjs --version 直接报错.. 查了半天的官方文档,居然连个毛线都么找到.终于...墨迹到了一个方法,就抱着试一试的心态在terminal里输入了这 ...

  7. Cannot evaluate the property expression "$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))" found at "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuil

    Cannot evaluate the property expression "$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBu ...

  8. 设计模式12---享元模式(Flyweight Pattern)

    享元模式 定义:共享元对象,运用共享技术有效地支持大量细粒度对象的复用.如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用创建新的对象. 享元模式是为数不多的.只为提 ...

  9. RDD介绍与执行

    repartition 增加或减少分区.会产生shuffle.(多个分区分到一个分区不会产生shuffle) coalesce coalesce常用来减少分区,第二个参数是减少分区的过程中是否产生sh ...

  10. Mysql自动设置时间(自动获取时间,填充时间)

    应用场景: 1.在数据表中,要记录每条数据是什么时候创建的,不需要应用程序去特意记录,而由数据数据库获取当前时间自动记录创建时间: 2.在数据库中,要记录每条数据是什么时候修改的,不需要应用程序去特意 ...