源代码:
for(var i = 0; i < $scope.list.length; i++){
if($scope.list[i].md_id == $scope.currentmetadatainfo.md_id){
$scope.list[i] = $scope.currentmetadatainfo;
}
}
代码解释:
我的JS代码里有一个list列表用于repeat显示,这里的currentmetadatainfo是当前编辑object。currentmetadatainfo对象改变后想刷新list列表对应的数据,结果是list刷新了,但是继续改变currentmetadatainfo对象的值,由于AngularJS的双向绑定机制,list[i]的值也会随之改变,也就是显示的列表内的数据也跟着发生了变化。
解决思路:在JS中对变量赋值变量时,常规是会复制一份拷贝,但如果值是一个对象(Object)时,传入的将是对象的地址。
解决方法:
AngularJS已经封装了相关的解决方法:angular.copy() 方法
for(var i = 0; i < $scope.list.length; i++){
if($scope.list[i].md_id == $scope.currentmetadatainfo.md_id){
var currentmetadatainfo = angular.copy($scope.currentmetadatainfo);
$scope.list[i] = currentmetadatainfo;
}
}
原文:https://my.oschina.net/yiqu/blog/547125