一、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数据更新后在视图上不响应的更多相关文章

  1. vue 数据更新了但视图没改变?试试 $set

    场景 编辑表格中某行数据时,需要把它赋值给对话框表单 this.form,如果直接用 = 赋值,会导致:表单的输入框内容无法二次编辑. 使用 Vue-dev-tool 的 Components 功能测 ...

  2. vue开发中,数据更新,但视图不刷新

    我们在开发过程中会碰到数据更新,但是视图并未改变的情况,情况如下: 第一种:动态给对象新增属性或者删除属性是不会触发视图刷新的,Vue识别不到: 第二种:通过数组下标修改数组中的元素或者手动修改数组的 ...

  3. Vue实现双向绑定的原理以及响应式数据

    一.vue中的响应式属性 Vue中的数据实现响应式绑定 1.对象实现响应式: 是在初始化的时候利用definePrototype的定义set和get过滤器,在进行组件模板编译时实现water的监听搜集 ...

  4. Vue开源项目汇总(史上最全)(转)

    目录 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element ★13489 - 饿了么出品的Vue2的web UI工具套件 Vux ★8133 - 基于Vue和 ...

  5. Vue数据更新页面没有更新问题总结

    Vue数据更新页面没有更新问题总结 1. Vue无法检测实例别创建时不存在于data中的property 原因: 由于Vue会在初始化实例时对property执行getter/setter转化,所以p ...

  6. SQLServer中在视图上使用索引(转载)

    在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你 ...

  7. SqlServer在视图上创建索引

    在视图上创建索引需要三个条件: 一.视图必须绑定到架构. 要做到这点,在 CREATE VIEW 语句中,必须加上 WITH SCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击 ...

  8. 为了记忆和方便翻阅 vue构建后的结构目录说明

    一. ├── build              // 项目构建(webpack)相关代码             记忆:(够贱)    9个 │ ├── build.js       // 生产环 ...

  9. JVM上的响应式流 — Reactor简介

    强烈建议先阅读下JVM平台上的响应式流(Reactive Streams)规范,如果没读过的话. 官方文档:https://projectreactor.io/. 响应式编程 作为响应式编程方向上的第 ...

  10. JVM平台上的响应式流(Reactive Streams)规范

    // Reactive Streams // 响应式流是一个倡议,用来为具有非阻塞后压的异步流处理提供一个标准.大家努力的目标集中在运行时环境(JVM和JavaScript)和网络协议上. 注:响应式 ...

随机推荐

  1. 转载--阿里云ECS自建K8S集群

    一.概述(官方建议) 集群规划 目前在创建Kubernetes集群时,存在着使用很多小规格ECS的现象,这样做有以下弊端: 小规格Woker ECS的网络资源受限. 如果一个容器基本可以占用一个小规格 ...

  2. Linux CentOS 7 离线安装.NET环境

    下载 下载.NET 例如: aspnetcore-runtime-6.0.15-linux-x64.tar.gz 复制 复制到如下目录: /usr/local/dotnet/aspnetcore-ru ...

  3. Spark Final-Examination Note

    重点 4567,Special 4,5 3道编程题,分值 35(基本书上,不超纲) 选填各 20分,简答 5 题/25分,编程题 3题/35分. 简答题参考每章课后习题 第 1 章简答题 1. 请阐述 ...

  4. HDU--1166--单点更新

    敌兵布阵 HDU - 1166 多组输入,注意清除tr数组 维护一个前缀数组,耗时有点大 #include <cstdio> #include <cstring> using ...

  5. 0x62 图论-最小生成树

    A题:走廊泼水节 链接:https://ac.nowcoder.com/acm/contest/1056/A 题目描述 给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小 ...

  6. oracle表空间已满解决

    在日常的oralce使用中最长遇到的问题就是oralce的表空间满了,数据无法写入报错,这种情况下通常是磁盘没有足够的空间或者表空间的数据文件达到32G(linux最大限制单个文件不超过32G)无法继 ...

  7. nextTick用法

  8. freeswitch的ACL规则

    概述 freeswitch是一款好用的VOIP开源软交换平台. VOIP公共网络中的安全问题是最重要的问题,我们必须对网络端口的访问权限做出限制. ACL全称Access Control List,意 ...

  9. php开发中常见的漏洞点(一) 基础sql注入

    前言 本系列为小迪2022的学习笔记,仅用于自我记录. 正文 在一般情况下,一个网站的首页大致如下 在上方存在着各种各样的导航标签.链接.而一般情况下网站的导航会用参数进行索引的编写,比如id.pag ...

  10. 问题--C++单例模式中唯一对象初始化时关于在类外调用私有的无参构造问题

    1.问题 在单例模式中初始化单例对象Person* Person::signal= new Person; 这一步在类外,而new Person需要调用私有的无参构造,但是只有在类内部才能调用私有函数 ...