今天写vue组件的时候碰到一个问题,我创建了一个子组件,这个子组件会通过父组件传过来的数组对象进行遍历,然后生成多个筛选菜单,这不是一个菜单,而是有多个,比如地区菜单,分类菜单,标签菜单,反正很多。

每个菜单都要有对应的active状态,我才能知道他选中了没有,所以又传给子组件一个对象,对象里面包含了所有的菜单id的键值对,但是值是空的,等待子组件状态发生变化,再修改对象中的值。

本来我是想省点事,不用vuex,然后利用对象的特性,引用类型,子组件可以直接修改对象里的属性,我父组件也能监控得到,但是问了下群友,说这种方式到时候很乱,所以我又改用了官方建议的方式,用emit。

为此就用了sync修饰符,具体用法也可以在本博客百度到,我就不多说了。

但问题是sync的修改,是直接修改整个对象,而子组件是对象中某个属性变化修改,所以,为了不让引用类型造成错乱,我只能使用对象克隆了,克隆一个对象,再对这个对象修改,再emit传给父组件,父组件使用,这样就完全断掉了引用类型的影响。

对象克隆

let upObj = {};
//克隆对象
Object.assign(upObj, this.activeData);  //this.activeData就是我要克隆的对象变量名

//此时upObj就是一个克隆对象了,我们对他做的修改,不会影响到this.activeData

克隆数组

//克隆数组
let upArr = Array.from(this.filterData); //this.filterData为要克隆的数组变量名

//此时upArr为一个全新的数组,且拥有this.filterData的值

都是es6的语法,有需要可以自行百度转换成es5

分类: JavaScript 标签: 克隆对象克隆数组

评论

暂无评论数据

暂无评论数据

目录