前言

一直纠结着使用v-for进行列表渲染时如何为当前的元素添加是否选中的标识。

1.v-for进行列表渲染

<div class="lists">
<ul>
<li class="border_first_after" v-for="(item,index) in lists" @click="isChecked(item)">
<div class="flex_parent">
<div class="lists_left">{{item.name}}</div>
<div class="flex_child lists_right">
<span class="isSelected" :class="{isChecked:item.checked}">√</span>
</div>
</div>
</li>
</ul>
</div>

附:@click=‘isChecked(item)’,变化检查问题方法,:class='{isChecked:item.checked}',为当前对象添加标识。

2.this.$set():变化检查问题

受现代 JavaScript 的限制(以及废弃 Object.observe),Vue 不能检测到对象属性的添加或删除。

由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,

这样才能让它是响应的。

Vue 不允许在已经创建的实例上动态添加新的根级响应式属性(root-level reactive property)。然而它可以使用

Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上。

 isChecked:function(item){
this.isLists=[];
var _this=this;
/*选中当前*/
if(typeof item.checked=='undefined'){
this.$set(item,'checked',true);
}else{
item.checked=!item.checked;
}
console.log('item:'+JSON.stringify(item)); /*判断选中个数*/
this.lists.forEach(function(item){
if(item.checked){
if(_this.isLists.length<4){
_this.isLists.push(item);
}else{
item.checked=false;
alert('最多选择4个');
}
}
});
//console.log('isLists:'+JSON.stringify(this.isLists));
}

3.汇总

 <div id="hobby">
<div class="lists">
<ul>
<li class="border_first_after" v-for="(item,index) in lists" @click="isChecked(item)">
<div class="flex_parent">
<div class="lists_left">{{item.name}}</div>
<div class="flex_child lists_right">
<span class="isSelected" :class="{isChecked:item.checked}">√</span>
</div>
</div>
</li>
</ul>
</div>
<p class="remarks">最多选择4个</p>
<div style="text-align: right">
<input class="saveBtn" type="button" value="保存" @click="save">
</div>
</div>
 /**
* Created by aaron on 2017/4/26.
*/
new Vue({
el:'#hobby',
data:{
checked:false,
isLists:[],
lists:[
{name:'亲子活动'},
{name:'体育赛事'},
{name:'DIY其他'},
{name:'多人聚会'},
{name:'慈善公益'},
{name:'周别户外'}
]
},
methods:{
isChecked:function(item){
this.isLists=[];
var _this=this;
/*选中当前*/
if(typeof item.checked=='undefined'){
this.$set(item,'checked',true);
}else{
item.checked=!item.checked;
}
console.log('item:'+JSON.stringify(item)); /*判断选中个数*/
this.lists.forEach(function(item){
if(item.checked){
if(_this.isLists.length<4){
_this.isLists.push(item);
}else{
item.checked=false;
alert('最多选择4个');
}
}
});
//console.log('isLists:'+JSON.stringify(this.isLists));
},
save:function(){
console.log('isLists:'+JSON.stringify(this.isLists));
}
}
});

4.更多

参考:vue官网:https://cn.vuejs.org/v2/guide/reactivity.html

     vue总结:https://segmentfault.com/a/1190000005832164

v-for并判断当前元素是否选中:$set实现响应添加属性的更多相关文章

  1. JS判断是不是本页面并且,给标签添加属性和属性值

    大多是在导航栏中用到的,在导航栏中在主页和在其他的网页点击导航栏中的主页是不同的,主要就是判断这个. 我是在ascs页面中写的. 下面先看标签: <a href="http://www ...

  2. jQuery通过判断 checkbox 元素的 checked 属性,判断 checkbox是否被选中

    jQuery设置复选框的属性<input type="checkbox"/> $("input").attr("checked" ...

  3. jQuery 判断页面元素是否存在的代码

    在原生的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在.原因是对一个不存在的元素进行操作是不允许的. 例如: document.getElementById(& ...

  4. 用jQuery判断一个元素的各种状态

    用jQuery判断一个元素是否显示   用jQuery判断一个元素是否显示:$(element).is(":visible"); 类似的,判断一个元素是不是第一个子元素:$(ele ...

  5. jQuery判断当前元素显示状态并控制元素的显示与隐藏

    1.jQuery判断一个元素当前状态是显示还是隐藏 $("#id").is(':visible');   //true为显示,false为隐藏 $("#id") ...

  6. jQuery基础 -- 如何判断页面元素存在与否

    在传统的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在.原因是对一个不存在的元素进行操作是不允许的.例如: document.getElementById(&q ...

  7. 判断jQuery元素是否隐藏

    第一种:使用CSS属性 复制代码 代码如下: var display =$('#id').css('display'); if(display == 'none'){    alert("被 ...

  8. jquery and js 判断一个元素是否存在

    一.javascript中判断一个元素是否存在 if(document.getElementById('example')){ // do sth } 二.jquery中判断一个元素是否存在 < ...

  9. jQuery判断当前元素是第几个元素&获取第N个元素

    假设有下面这样一段HTML代码: <ul> <li>jQuery判断当前元素是第几个元素示例</li> <li>jQuery获取第N个元素示例</ ...

随机推荐

  1. websocket(二) websocket的简单实现,识别用户属性的群聊

    没什么好说的,websocket实现非常简单,我们直接看代码. 运行环境:jdk8 tomcat8 无须其他jar包. 具体环境支持自己百度 package com.reach.socketContr ...

  2. Effective Java 第三版——12. 始终重写 toString 方法

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  3. Java IO详解(四)------字符输入输出流

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  4. 一、 kettle开发、上线常见问题以及防错规范步骤

    此篇说明对应的kettle版本是6.1,实际使用时7.x应该也是一样的. 一.    kettle开发流程(规范步骤,防止出错) (一)       Kettle设置检查 资源库连接 如果不加一下配置 ...

  5. NPOI 2.0 教程

    NPOI2.0帮助官方地址 目录 1. 前言 1.1 NPOI 2.0与NPOI 1.x的区别 1.2 NPOI 2.0模块简介 1.3 自动识别并打开Excel 2003和Excel 2007文件 ...

  6. 微服务时代TestOps工程师学习总结

    TestOps很新鲜,也是近期衍生的新型职位.那TestOps主要目的是推动整个研发体系与发布体系更多在质量方面.可以这样理解DevOps是从研发推动配合运维和测试,而TestOps是从测试角度推动研 ...

  7. 地址总线、数据总线、寻址能力、字长及cpu位数等概念之间的关系

    地址总线决定了CPU的寻址能力:数据总线的宽度与字长及CPU位数一致. 详细解释见下文: 1.地址总线与寻址能力 要存取数据或指令就要知道数据或指令存放的位置,地址寄存器存储的就是CPU当前要存取的数 ...

  8. 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例

    使用vue-cli可以规范项目,提高开发效率,但是使用vue-cli时需要一些ECMAScript6的知识,特别是ES6中的模块管理内容,本章先介绍ES6中的基础与模块化的内容再使用vue-cli开发 ...

  9. mysql一致性读

    Consistent Nonlocking Reads 一致读意味着InnoDB用多版本来提供一个查询数据库某个时间点的快照.这种查询可以看到在当前世界点之前事务提交的改变,看不到此后提交的改变,更看 ...

  10. JAVA中的设计模式三(策略模式)

    问题: 如何让算法和对象分开来,使得算法可以独立于使用它的客户而变化?   方案: 把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就 ...