关于Vue的响应式原理,可以看官方文档或其他资料,

https://www.jianshu.com/p/34de360d6035

data里定义了一个数组arr,数组的元素可以是同样格式的数组arrChild(数组嵌套),如果只改变最外层的元素即arr的元素,视图可以更新,如果改变的是arrChild里边的数据(内层元素),视图不会自动更新。

比如有这样一个功能:根据id删除删除一条数据,需要循环遍历整个数组及子数组,

this.removeData(this.data, id)

removeData (items, id) {

items.forEach((item, index)=>{if (item.id ===id) {

items.splice(index,1)

console.log('这相等了', item, items)returnitems

}if(item.children) {

item.children= (this.removeData(item.children, id))//使用splice方法去更新改变后的子数组,

items.splice(index, 1, item)

}

})

console.log(2, this.poi++, items)returnitems

}

如果有子数组则递归调用removeData方法, 在修改子数组后,返回该子数组,使用splice方法更新该数组元素。

data :

data: [{

id:'1',

code:'0001',

name:'测试数据1',

status:'启用',

remark:'测试数据测试数据'}, {

id:'2',

code:'0002',

name:'测试数据2',

status:'启用',

remark:'测试数据测试数据',

children: [{

id:'01',

code:'00001',

name:'测试数据01',

status:'启用',

remark:'测试数据测试数据'}, {

id:'02',

code:'00002',

name:'测试数据02',

status:'启用',

remark:'测试数据测试数据',

children: [{

id:'001',

code:'000001',

name:'测试数据001',

status:'启用',

remark:'测试数据测试数据'}, {

id:'002',

code:'000002',

name:'测试数据002',

status:'启用',

remark:'测试数据测试数据'}]

}]

}, {

id:'3',

code:'0003',

name:'测试数据3',

status:'启用',

remark:'测试数据测试数据'}, {

id:'4',

code:'0004',

name:'测试数据4',

status:'启用',

remark:'测试数据测试数据'}]

PS:

拷贝对象或者数组时,可以使用扩展运算符 "..."。如果对象或者数组中包含子对象和子数组,使用JSON.parse(JSON.stringify(str)) 。

const obj3 = {...obj}

const itemsCopy = [...items]

const itemsCopySub = JSON.parse(JSON.stringify(items))

vue 数组中嵌套数组_Vue 嵌套数组 数组更新视图不更新相关推荐

  1. vba 跳到下一个循环_VBA野知识分享:从一个数组中取部分值生成新数组,不使用循环的思路...

    从一个数组中取部分值生成新数组,要实现此需求通常都是采用循环的方法来完成,那有没有更简易的思路呢? 借用jscript可以实现,直接取值,不用循环.例如从100000万中元素是取8000个值出来生成新 ...

  2. C语言向有序数组中插入一个数使该数组仍保持有序

    C语言向有序数组中插入一个数使该数组仍保持有序 #include<stdio.h> int main() {     int n,i,j,t,k;     printf("您喜欢 ...

  3. 取原始数组中的指定数据push新数组

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>取原始 ...

  4. asp数组中REDIM的用法(动态数组)

    asp数组中REDIM的用法(动态数组) 动态数组里面的一个语句,只能出现在过程里面,可以多次使用.可以改变数组大小,和维数 格式: REDIM [Preserve] 数组名(下标1[下标2....] ...

  5. 数组中哪些常用方法会修改原数组

    一.不会改变原来数组的有: concat() concat() 方法用于连接两个或多个字符串. 该方法没有改变原有字符串,但是会返回连接两个或多个字符串新字符串. every() every() 方法 ...

  6. 【JS实战】移除数组中的元素(返回新的数组)

    移除数组中的元素(返回新的数组) 方法一:for循环+push function remove(arr, item) {let newArr = [];for(let i = 0; i < ar ...

  7. js移除数组中的元素(返回新数组)

    移除数组中的元素(返回新数组) 移除数组 arr 中的所有值与 item 相等的元素.不要直接修改数组 arr,结果返回新的数组. 输入:[1,2,3,4,2] ,2 输出:[1,3,4] 第一种解决 ...

  8. 利用for循环把遍历数组中的元素依次获取出来 数组笔记及基本知识点

    利用for循环把遍历数组中的元素依次获取出来 数组索引号从0开始 所以i必须从0开始  i<6 <script>var arr = ['blue', 2, true, 4, 5, 6 ...

  9. c++[2035]将a数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置。

    [题目描述] 将a数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置. [输入] 第一行为数组a的元素个数: 第二行为n个小于1000的正整数. [输出] 平移后的数组元素,每个数用一个空格隔 ...

  10. 删除数组中某个指定元素或删除数组中某个对象元素

    ES6--删除数组中某个指定元素或删除数组中某个对象 1.删除数组中某个指定元素 2.删除数组中的某个对象 1.删除数组中某个指定元素 let index = this.array.indexOf(n ...

最新文章

  1. Check failed: error == cudaSuccess (35 vs. 0) CUDA driver version is insufficient for CUDA runtime
  2. 如何在oracle中查询所有用户表的表名、主键名称、索引、外键等
  3. 程序员创业其实相比其他行业也有一些优势
  4. 良好的XHTML规则
  5. 为什么需要消息队列(MQ)
  6. lammps教程:nve/nvt/npt系综设置方法
  7. 激励视频广告 Android,激励视频广告
  8. 播布客LINUX视频笔记
  9. 夏天什么适合做引流产品?夏天用什么东西做引流的产品
  10. 【图像去噪】基于小波变换(中值、硬阙值、软阙值)的图像去噪含Matlab源码
  11. 如何用python画出一般函数图_python如何画函数图像
  12. linux线程互斥锁
  13. 百部BBC经典纪录片,附地址,需要的请抱走
  14. 不愁失业!英伟达 CEO 黄仁勋:“AI 让每个人都能成为程序员”
  15. Android-版本控制 SVN
  16. 基于Webform+ScriptManager控件实现的聊天室
  17. 扒一扒神经网络--NIN
  18. matlab在三维空间中三点绘制圆弧
  19. 思想决定行为,行为决定习惯,习惯决定性格,性格决定命运
  20. 努比亚android最高版本,努比亚Z17用户注意了,安卓9.0很快就要升级了

热门文章

  1. 【云开发】- 在小程序端操作云存储
  2. leetcode 1667 sql中字符串处理函数
  3. Python中的*(星号)和**(双星号)完全详解
  4. TiDB数据库概述——PD
  5. 【python】pyplot绘制横轴为时间的图
  6. java 代码注释搞笑_笑哭丨谁的代码注释我都不服,就服你的!
  7. Python 进程池与进程锁
  8. 记录·linux系统中硬盘的挂载与格式化
  9. win7系统未响应卡住_系统经常假死怎么办|win7系统经常无响应|win10系统经常未响应怎么解决...
  10. 【钓鱼】与【反钓鱼】的技术剖析