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

方法一:

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. 安装CentOS 6.4 64 位操作系统

    1.安装 CentOS 6.4 64位操作系统的一些困境: 1.1 CentOS 6.4 64位操作系统的ISO文件有4G多,通过U盘安装的方式已经不可取(FAT32 只支持最大4G文件); 1.2 ...

  2. C#中把任意类型的泛型集合转换成SQLXML数据格式的小例子

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  3. 机器学习及其matlab实现—从基础到实践

    第1周 MATLAB入门基础 第2周 MATLAB进阶与提高 第3周 BP神经网络 第4周 RBF.GRNN和PNN神经网络 第5周 竞争神经网络与SOM神经网络 第6周 支持向量机(Support ...

  4. 编写高质量代码改善C#程序的157个建议——建议76: 警惕线程的优先级

    建议76: 警惕线程的优先级 线程在C#中有5个优先级:Highest.AboveNormal.Normal.BelowNormal和Lowest.讲到线程的优先级,就会涉及线程的调度.Windows ...

  5. javascript事件坐标

    clientX 鼠标在页面显示区域的坐标 screenX鼠标在显示屏幕上的坐标 layerX 鼠标相对于“触发事件的元素的层级关系中离该元素最近的,设置了position的父元素”的边界的位置,从bo ...

  6. Alpha冲刺 - (9/10)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 进一步优化代码,结合自己负责的部分修 ...

  7. 用layer-list做一个卡片背景

    <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android=" ...

  8. hibernate3的配置

    原创 链接:https://pan.baidu.com/s/1S-x271CT3wBqQodfFI1dZg 密码:ghti hiberdate3的下载链接如上 hibernate3在MyEclipse ...

  9. Java知多少虚拟机(JVM)以及跨平台原理

    相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就 ...

  10. 修改mysql时区的三种方法

    方法一:通过mysql命令行模式下动态修改 1.1 查看mysql当前时间,当前时区 > select curtime(); #或select now()也可以 +-----------+ | ...