不知道大家有没有遇到过这个问题,当我们给data里边声明或者已经赋值过的对象或者数组,添加新的属性时,如果更新此属性的值是不会动态更新视图的。
$set

看以下实例:
我们开始给drug_list追加一个新的属性‘edit_select’,默认所有的编辑状态为false,当我们点击的时候,把当前点击的编辑状态置为true

作者:_conquer_
链接:https://www.jianshu.com/p/c457cfe7d713
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 <div id="box">
<div v-for="drug_item in drug_list" @click="choose(drug_item)">
<a :class="{pressed:drug_item.edit_select}"></a>
<span>{{drug_item.drug_common_name}}{{drug_item.edit_select}}</span>
</div>
</div>
<script>
var vm = new Vue({
el:'#box',
data:{
drug_list:[
{drug_common_name: "辛伐他汀片",drug_count: "1"},
{drug_common_name: "喉疾灵片",drug_count: "2"},
{drug_common_name: "乐脉胶囊",drug_count: "3"},
]
},
created:function(){
this.setData();
},
methods: {
setData:function(){
for(var i=0;i<this.drug_list.length;i++){
this.drug_list[i]['edit_select']=false;
}
},
choose:function(item){
item.edit_select=true;
console.log(item)
},
}
})
</script>

我们打印一下点击之后的数据会发现数据已经改了

 
QQ截图20181115175134.png

但是我们看一下页面效果,会发现并没有添加上class,把数据在页面上打印一下会发现,页面上面的‘edit_select’并没有动态更改

 
QQ截图20181115175352.png

这是为什么呢?
仔细阅读官方文档,我们会发现:

Vue 不允许在已经创建的实例上动态添加新的根级响应式属性, Vue 无法探测普通的新增属性

怎么办呢?

Vue.set( target, key, value )

  • 参数
    {Object | Array} target
    {string | number} key
    {any} value
  • 返回值:设置的值。
    我们只需要把下面的改一下就可以了
for(var i=0;i<this.drug_list.length;i++){
//this.drug_list[i]['edit_select']=false;
that.$set(this.drug_list[i], 'edit_check', false);
}

关于vue给对象新增属性页面不会动态更新的更多相关文章

  1. vue修改对象的属性值后页面不重新渲染

    原文地址:vue修改对象的属性值后页面不重新渲染 最近项目在使用vue,遇到几次修改了对象的属性后,页面并不重新渲染,场景如下: HTML页面如下: [html] view plain copy &l ...

  2. Vue-给对象新增属性(使用Vue.$set())

    在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的. 根据官方文档定义 ...

  3. vue新增属性是否会响应式更新?

    原文地址 在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的. 根据官 ...

  4. Vue 给对象添加属性

    坑真多,没想到很多小细节都 改了,我添加个属性都 折腾了半天才看明白原因 Vue.set(row,"isEdit",false);   //给row对象新增一个isEdit的属性.

  5. VUE不能对新增属性监测更新

    data () { return { data:{}, } }, method:{ if(data.code==0){ this.loading = false; this.data = data.d ...

  6. VUE 动态给对象增加属性,并触发视图更新。

    在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的. 根据官方文档定义 ...

  7. jquery ajax 返回的json对象 新增属性值(干货)

    $.ajax({ type:"GEt'; url:"你的地址", data:{"你的字段","字段值"} success:funt ...

  8. 遍历json 对象的属性并且动态添加属性

    昨天因为公司的一个需求,所以就研究了一下json对象的属性的遍历和动态修改: var person= { name: 'zhangsan', pass: '123' , 'sni.ni' : 'sss ...

  9. vue 数组中嵌套的对象添加新属性--页面更新

    vue 数组中嵌套的对象添加新属性--页面更新:https://www.jianshu.com/p/8f0e5bb13735

随机推荐

  1. Java Web开发技术教程入门-JSP基本语法和九大内置对象

    这两天气温逐渐升高,好想把自己泡在冰块里······ 恩嗯摁蒽恩嗯摁蒽恩嗯摁蒽恩嗯摁蒽.......今天阅读到了这本书的第四章-JSP基本语法.经过第一天的阅读,我们明白JSP技术是Java Web开 ...

  2. vscode学习(二)之显示中文异常解决办法

    异常原因:VSCODE默认是UTF-8编码打开文件的.如果遇到了像GB18030 GBK等等的编码,就显示乱码了. 解决办法: 在设置文件中加入:"files.autoGuessEncodi ...

  3. AutoLayout and Sizeclasses讲解

    iOS8和iPhone6发布已经过去蛮久了,广大的果粉终于迎来了大屏iPhone,再也不用纠结为大屏买三星舍苹果了…但是对于iOS开发人员来说,迎来了和Android开发开发一样的问题—>各种屏 ...

  4. python日志汇总

    1. 文件头在Linux下推荐文件头: #! /usr/bin/env python # -*- coding: utf-8 -*- 2.import导入语句 import: 一般导入第三包可以直接使 ...

  5. Delphi 常用系统函数与过程

  6. kill - 终止进程

    SYNOPSIS(总览) kill[-ssignal|-p][-a]pid... kill -l [ signal ] DESCRIPTION (描述) kill 给指定进程发送指定信号. 如果没有指 ...

  7. wordpress的固定链接问题

    在安装完wordpress后,按照其方法在/etc/apache2/sites-available/000-default.conf文件中添加了下述代码中的加重部分: [...] ServerAdmi ...

  8. Linux下网络设置

    1.临时IP配置 # ifconfig eth0   192.168.110.118    netmask 255.255.255.0   gateway 192.168.110.2    up # ...

  9. AIX用户和组管理

    1.用户登录和初始化

  10. 自动化监控软件之zabbix安装

    自动化监控系统 cacti : 基于snmp(简单的网络管理协议)协议的监控软件,强大的绘图软件 缺点: 自带的监控模板比较少,不能默认 自带监控报警功能(只能自己去官网下载模板) Nagios: 插 ...