Javascript赋值传址的一点小坑(AngularJS)

原创
2015/12/18 10:09
阅读数 1.4K

原代码是这样的:

$scope.showUpgradeForm = function(item){
    $scope.upgrade = item;
    $scope.upgrade.vercode++;
    // 其它操作
}

代码解释:我的JS代码里有一个list列表用于repeat显示,这里的item是从循环中传入的列表数据object。然后调用showUpgradeForm操作时问题来了,由于AngularJS的双向绑定机制,我这里对upgrade的vercode赋值导致list中的item也更新了,也就是显示的列表内的数据也跟着发生了变化。

解决思路:这个问题给人一看就是赋值指针出了问题,通过查询资料,果然。在JS中对变量赋值变量时,常规是会复制一份拷贝,但如果值是一个对象(Object)时,传入的将是对象的地址。

解决方法:百度了一些JS对象拷贝的代码,一看真是吓死宝宝了,一大段的代码,果断弃用,大不了不用AngularJS惹。。。后来还是在AngularJS相关的群里找到了解决方法,原来AngularJS已经封装了相关的解决方法:

$scope.showUpgradeForm = function(item){
    $scope.upgrade = angular.copy(item);
    $scope.upgrade.vercode++;
    // 其它操作
}

重点是 angular.copy() 方法,这里不得不再次感慨一下真*大神的智慧。

展开阅读全文
加载中

作者的其它热门文章

打赏
1
2 收藏
分享
打赏
0 评论
2 收藏
1
分享
返回顶部
顶部