vue数据更新后在视图上不响应
一、vue如何追踪变化
当你把一个普通的JS对象传给vue实例的data选项时,
vue将遍历此对象的所有属性,
并使用 Object.defineProperty 把这些属性全部转为 getter/setter 。
Object.defineProperty是ES5中一个无法识别的特性,
这也就是为什么vue不支持IE8以及更低版本的浏览器。
二、为什么使用Vue.set()
因为受现代JS的限制,vue不能检测到对象属性的添加或删除。(重要!!!)
由于vue会在初始化实例时对属性执行 getter/setter 转化过程,
所以属性必须在data对象上存在才能让vue转换它,这样它才能是响应的。
vue不允许在已经创建的实例上动态添加新的根级响应式属性,(注意!!!)
不过可以使用Vue.set()方法将响应式属性添加到嵌套的对象上。
三、 更新数据(Array)失败
this.list[0] = '王五';
当我们修改数据之后, 【this.list[0] = '王五';】
视图上并没有发生变化,
实际上这个修改并不能生效,因为Vue不能检测到以下变动的数组:
1==> 当你利用索引直接设置一个项时,例如: this.list[index] = newValue
2==> 修改数组的length属性,例如: this.list.length = 0
所以在上例中通过this.list[0] = '王五' 是无法触发数据响应的,
<template>
<div class="about">
<template>
<div>
<ul>
<li v-for="item in list" :key="item">
{{ item }}
</li>
</ul>
<button @click="handleChangeName">修改名称</button>
</div>
</template>
</div>
</template>
<script>
//别忘记引入vue
import Vue from 'vue'
export default {
data() {
return {
list: ['张三', '李四'],
personArr: [{name:'张三',age:20},{name:'李四',age:30}],
}
},
methods: {
// 修改用户名称
handleChangeName() {
// 这样更改会失败
// this.list[0] = '王五'
// 这样更改ok的
Vue.set(this.list,0,'王五')
//如果你更改的是数数组的某一项
let obj1={name:'李四',age:30,sex:'男'}
Vue.set(this.personArr,0,obj1)
//如果你只是想添加一个key值的话;
obj2['xueli']='大专';
Vue.set(this.personArr,0,obj2)
}
}
}
</script>
vue数据更新后在视图上不响应的更多相关文章
- vue 数据更新了但视图没改变?试试 $set
场景 编辑表格中某行数据时,需要把它赋值给对话框表单 this.form,如果直接用 = 赋值,会导致:表单的输入框内容无法二次编辑. 使用 Vue-dev-tool 的 Components 功能测 ...
- vue开发中,数据更新,但视图不刷新
我们在开发过程中会碰到数据更新,但是视图并未改变的情况,情况如下: 第一种:动态给对象新增属性或者删除属性是不会触发视图刷新的,Vue识别不到: 第二种:通过数组下标修改数组中的元素或者手动修改数组的 ...
- Vue实现双向绑定的原理以及响应式数据
一.vue中的响应式属性 Vue中的数据实现响应式绑定 1.对象实现响应式: 是在初始化的时候利用definePrototype的定义set和get过滤器,在进行组件模板编译时实现water的监听搜集 ...
- Vue开源项目汇总(史上最全)(转)
目录 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element ★13489 - 饿了么出品的Vue2的web UI工具套件 Vux ★8133 - 基于Vue和 ...
- Vue数据更新页面没有更新问题总结
Vue数据更新页面没有更新问题总结 1. Vue无法检测实例别创建时不存在于data中的property 原因: 由于Vue会在初始化实例时对property执行getter/setter转化,所以p ...
- SQLServer中在视图上使用索引(转载)
在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你 ...
- SqlServer在视图上创建索引
在视图上创建索引需要三个条件: 一.视图必须绑定到架构. 要做到这点,在 CREATE VIEW 语句中,必须加上 WITH SCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击 ...
- 为了记忆和方便翻阅 vue构建后的结构目录说明
一. ├── build // 项目构建(webpack)相关代码 记忆:(够贱) 9个 │ ├── build.js // 生产环 ...
- JVM上的响应式流 — Reactor简介
强烈建议先阅读下JVM平台上的响应式流(Reactive Streams)规范,如果没读过的话. 官方文档:https://projectreactor.io/. 响应式编程 作为响应式编程方向上的第 ...
- JVM平台上的响应式流(Reactive Streams)规范
// Reactive Streams // 响应式流是一个倡议,用来为具有非阻塞后压的异步流处理提供一个标准.大家努力的目标集中在运行时环境(JVM和JavaScript)和网络协议上. 注:响应式 ...
随机推荐
- TeamX 引擎的高并发能力测试
TeamX,是基于 SolonJT 引擎构建的一个团队协工具.主要功能有: Wiki(团队词条,用于写接口文档也行...) Planned(项目计划 和 个人日志) 比较兄弟产品,区别会很大:基于表格 ...
- Jenkins Pipeline 多分支流水线 Input length = 1
Jenkins 多分支流水线 构建过程中报错. [Pipeline] // node [Pipeline] End of Pipeline java.nio.charset.MalformedInpu ...
- 如何优化k8s中HPA的弹性速率
本文分享自华为云社区<K8s 核心资源指标HPA性能优化之路>,作者:可以交个朋友. 一 背景 以弹性指标为cpu.memory为例.在Kubernetes 1.7版本中引入了聚合层,允许 ...
- 0x53 动态规划-区间DP
A: 石子合并 所求问题:1到n这些石子合并最少需要多少代价 由于石子合并的顺序可以任意,我们将石子分为两个部分 子问题:1到k这堆石子合并,k+1到n这堆石子合并,再把两堆石子合并,需要多少代价\( ...
- java对base64的图片进行压缩
目标:用java将图片的base64码压缩到40kb以下. 依赖 <!-- 压缩图片--> <dependency> <groupId>net.coobird< ...
- 八、java操作swift对象存储(静态大对象)
系列导航 一.swift对象存储环境搭建 二.swift添加存储策略 三.swift大对象--动态大对象 四.swift大对象--静态态大对象 五.java操作swift对象存储(官网样例) 六.ja ...
- mongose查询
- zzuli1895: 985的0-1串难题
//解法:用二分查找,如果当前位置是'1',则查找比这个位置多k+1个零的位置,如果当前位置是'0',则查找比当前位置多k个零的位置, 注意要在末尾添个最大的值 #include<iostrea ...
- windows无法远程访问liunx的mysql解决方案(8.0.27版本)
一.安装后mysql后发现windows上的无法正常访问,报错如下: 不管是navicat软件,还是使用python的pymsql进行连接 1.navicat软件如下:"Access den ...
- Skywalking 的使用
本文为博主原创,未经允许不得转载: 官网:http://skywalking.apache.org/下载:http://skywalking.apache.org/downloads/Github:h ...