v-for并判断当前元素是否选中:$set实现响应添加属性
前言
一直纠结着使用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实现响应添加属性的更多相关文章
- JS判断是不是本页面并且,给标签添加属性和属性值
大多是在导航栏中用到的,在导航栏中在主页和在其他的网页点击导航栏中的主页是不同的,主要就是判断这个. 我是在ascs页面中写的. 下面先看标签: <a href="http://www ...
- jQuery通过判断 checkbox 元素的 checked 属性,判断 checkbox是否被选中
jQuery设置复选框的属性<input type="checkbox"/> $("input").attr("checked" ...
- jQuery 判断页面元素是否存在的代码
在原生的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在.原因是对一个不存在的元素进行操作是不允许的. 例如: document.getElementById(& ...
- 用jQuery判断一个元素的各种状态
用jQuery判断一个元素是否显示 用jQuery判断一个元素是否显示:$(element).is(":visible"); 类似的,判断一个元素是不是第一个子元素:$(ele ...
- jQuery判断当前元素显示状态并控制元素的显示与隐藏
1.jQuery判断一个元素当前状态是显示还是隐藏 $("#id").is(':visible'); //true为显示,false为隐藏 $("#id") ...
- jQuery基础 -- 如何判断页面元素存在与否
在传统的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在.原因是对一个不存在的元素进行操作是不允许的.例如: document.getElementById(&q ...
- 判断jQuery元素是否隐藏
第一种:使用CSS属性 复制代码 代码如下: var display =$('#id').css('display'); if(display == 'none'){ alert("被 ...
- jquery and js 判断一个元素是否存在
一.javascript中判断一个元素是否存在 if(document.getElementById('example')){ // do sth } 二.jquery中判断一个元素是否存在 < ...
- jQuery判断当前元素是第几个元素&获取第N个元素
假设有下面这样一段HTML代码: <ul> <li>jQuery判断当前元素是第几个元素示例</li> <li>jQuery获取第N个元素示例</ ...
随机推荐
- 阅读MDN文档之StylingBoxes(五)
目录 BoxModelRecap Box properties Overflow Background clip Background origin Outline Advanced box prop ...
- Java_Date_02_截断日期到日
oracle 的 trunc 函数能很方便的将日期截断.现在有个需求,需要用java实现与 oracle 的 trunc 函数 相同的功能. 1.需求:将日期截断到日 即 将格式为 2018-01-0 ...
- 盗版SQL Server的性能限制
盗版SQL Server的性能限制 微软的SQL Server产品分为两种卖法1.盒装 :Server+CAL授权方式(SQL2017取消了Server+CAL授权方式,盗版序列号,一般电脑城有卖光盘 ...
- PHP 购物车 php闭包 array_walk
<?php class Cart { const PRICE_BUTTER = 1.00; const PRICE_MILK = 3.00; const PRICE_EGGS = 6.95; p ...
- SQL基础学习_02_查询
SELECT语句 1. SELECT语句查询列(字段): SELECT <列名> FROM <表名>; 该语句使用了两个SQL子句,SELECT子句列举了 ...
- node 使用koa2 异步读文件
目的:在一个文件夹(image)中有很多文件夹和文件,排除掉文件,将所有文件夹找出来 知识点: async 函数与 await .只有在async函数内部,才能使用await,await等的必须是p ...
- HTML5图片上传本地预览
在开发 H5 应用的时候碰到一个问题,应用只需要一张小的缩略图,而用户用手机上传的确是一张大图,手机摄像机拍的图片好几 M,这可要浪费很多流量. 我们可以通过以下方式来解决. 获取图片 通过 File ...
- Java学习笔记-枚举类型
枚举类型 枚举类型就是预先定义的一类常量集合,如一周的时间.水果的类型等.需要注意的几点内容如下: 定义枚举类时,Java默认继承java.lang.Enum,所以定义的枚举类不能继承其他类型: 枚举 ...
- SSM框架开发web项目系列(六) SpringMVC入门
前言 我们最初的javaSE部分学习后,基本算是入门了,也熟悉了Java的语法和一些常用API,然后再深入到数据库操作.WEB程序开发,渐渐会接触到JDBC.Servlet/Jsp之类的知识,期间可能 ...
- ComboBox 中 DisplayMember 和 ValueMember 都是具体干什么的?
ComboBox组件的数据绑定,在得到数据集后,只有设定好ComboBox组件的的三个属性就可以完成数据绑定了,这三个属性是:"DisplayMember". "Valu ...