利用javascript里面浅复制与深复制的原理,用vue做三级联动,并且复制联动行为
对于字符串类型,浅复制是对值的复制,对于对象来说,浅复制是对对象地址的复制,并没 有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会改变,而深复制则是开辟新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。根据这样,来做一个vue的三级联动,利用深复制进行添加新的三级联动!如图所示
文章图片
需求截图.png 【利用javascript里面浅复制与深复制的原理,用vue做三级联动,并且复制联动行为】直接上vue代码,其中el-select是element ui里面的下拉选择框:
删除export default {
data () {
return {
addone:[{
condition: '',
field: '',
data: '',
options1:[{
value: 'data0',
label: 'A',
options2: [{
value: 'Congruent',
label: 'A_1'
},{
value: 'Contain',
label: 'A_2'
}]
},{
value: 'data1',
label: 'B',
options2: [{
value: 'Congruent',
label: 'B_1'
},{
value: 'Contain',
label: 'B_2'
}]
},{
value: 'data2',
label: 'C',
options2: [{
value: 'Congruent',
label: 'C_1'
},{
value: 'Contain',
label: 'C_2'
}]
}]
}],value: '',
value1: '',
input: '',
}
},
methods: {
toadd: function () {
// this.add.push({ 'condition': '', 'field': '', 'data': '' });
var toadd=this.addone;
//深复制,可以复制其行为且不改变原有的指向
var result = JSON.parse(JSON.stringify(toadd[toadd.length-1]));
this.addone.push(result );
},
del: function (n) {
if(n<1){
return;
}
this.addone.splice(n, 1)
},
select(res,tt){
for (var j = 0;
j < this.addone[tt].options1.length;
j++) {
if(res===this.addone[tt].options1[j].value){
this.addone[tt].options3=this.addone[tt].options1[j].options2
return;
}
}},}
},}```
推荐阅读
- 事件代理
- 数组常用方法一
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 【万伽复利】什么是复利(如何利用复利赚钱?)
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- 【读书笔记】JavaScript|【读书笔记】JavaScript DOM编程艺术 (第2版)