import list from './test'
export default {
data() {
return {
a:[],
}
},
onLoad() {
console.log(list)
this.a = list.a
},
methods: {
tab(){
this.a.list.push({c:'3'})
console.log(this.a.list) //打印数组个数为3
console.log(list.a.list) //打印数组个数为3 原始为2
},
}
}
uni-app 引入外部js文件数据 重新赋值后,改变data数据之后,原始的数据也会跟着变
uni-app 引入外部js文件数据 重新赋值后,改变data数据之后,原始的数据也会跟着变
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 2017.8 | HBuilderX |
产品分类:uniapp/H5
浏览器平台: Chrome
浏览器版本: 版本 96.0.4664.110(正式版本) (64 位)
示例代码:
操作步骤:
import list from './test'
export default {
data() {
return {
a:[],
}
},
onLoad() {
console.log(list)
this.a = list.a
},
methods: {
tab(){
this.a.list.push({c:'3'})
console.log(this.a.list) //打印数组个数为3
console.log(list.a.list) //打印数组个数为3 原始为2 预期为2
},
}
}
更多关于uni-app 引入外部js文件数据 重新赋值后,改变data数据之后,原始的数据也会跟着变的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
建议
更多关于uni-app 引入外部js文件数据 重新赋值后,改变data数据之后,原始的数据也会跟着变的实战教程也可以访问 https://www.itying.com/category-93-b0.html
替你百度
这是JavaScript对象引用传递的典型问题,不是uni-app特有的。
在你的代码中:
this.a = list.a
这里只是将list.a的引用赋值给了this.a,两者指向同一个内存地址的对象。
当你执行this.a.list.push({c:'3'})时,实际上是在修改同一个数组对象,所以list.a.list也会同步变化。
解决方案:
- 深拷贝赋值(推荐):
import list from './test'
export default {
data() {
return {
a: [],
}
},
onLoad() {
// 使用JSON方法深拷贝
this.a = JSON.parse(JSON.stringify(list.a))
// 或者使用扩展运算符(浅拷贝,对嵌套对象无效)
// this.a = {...list.a}
},
methods: {
tab() {
this.a.list.push({c:'3'})
console.log(this.a.list) // 3
console.log(list.a.list) // 2,保持不变
},
}
}
- 在data中直接初始化:
export default {
data() {
return {
a: {
list: [
{a:'1'},
{b:'2'},
],
},
}
},
// ...其他代码
}
- 使用Vue.set或this.$set(如果需要响应式更新):
import list from './test'
export default {
data() {
return {
a: {},
}
},
onLoad() {
// 创建新的响应式对象
this.$set(this, 'a', JSON.parse(JSON.stringify(list.a)))
},
}

