不知道大家有没有遇到过这个问题,当我们给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. python的类属性、实例属性、类方法、静态方法

    类属性 就像如下代码: class Person: name = "张三" # 共有类属性 __age = 18 # 私有类属性 在类中直接定义的属性就是类属性,它被所有的实例对象 ...

  2. Maven build 命令介绍(转)

    常用命令: 打包:mvn package编译:mvn compile清空:mvn clean(清除编译后目录,默认是target目录)运行测试:mvn test安装jar包到本地仓库中:mvn ins ...

  3. 杜恩德的新博客,都来看看-duende99

    啊啊啊啊 https://home.cnblogs.com/u/duende99/

  4. Centos7 用gogs搭建git仓库

    0.安装步骤 先安装依赖,然后创建数据库,创建git用户,安装Gogs软件,设置启动,访问web界面进行配置 一.Gogs依赖环境 安装Gogs之前需要配置相应的依赖环境,官网介绍的依赖环境如下: 数 ...

  5. JAVA重写不需要@override

    一,如下代码, package com.boot.enable.bootenable; import org.springframework.scheduling.annotation.Async; ...

  6. Delphi 7的特点

  7. Instr()函数用法

    返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置. 语法 InStr([start, ]string1, string2[, compare]) InStr 函数的语法具有 ...

  8. 一、Linux 设备驱动介绍及开发环境搭建(续)

    1.2.6 uboot 编译安装 嵌入式 bootloader 的功能: 功能类似于 PC 的 BIOS.硬件检测是否正常 加载操作系统镜像到 RAM 设置不同的启动方式 常见的启动方式: NOR/N ...

  9. windows中ftp下载脚本(bat+vb)

    做了个ftp下载脚本: ftpdownload.bat @rem 注释:从ftp服务器每小时下载北向性能文件的脚本 @rem 用vb脚本取昨天 for /f %%a in ('cscript //no ...

  10. 【洛谷P1730】最小密度路径

    题目大意:给定一个 N 个点,M 条边的有向图,现有 Q 个询问,每次询问 X 到 Y 的最小密度路径是多少.最小密度路径的定义是路径长度除以路径边数. 题解:利用矩阵乘法,可以预处理出从 X 到 Y ...