我真的不明白为什么这段代码会像它那样工作。
我调用我的服务并返回预期的数据。我希望单独存储图片,因为我需要修改数组并以不同方式解析新范围。我不明白的是,我现在已经创建了两个范围,产品和产品图片 - 为什么这些仍然存在?
如果我将Lodash用于_.sort()productPictures,那么scope.Product中的Images对象也会被更改,但是我不希望这种情况发生,我不知道如何隔离$ scope.productPictures 。我尝试将范围作为简单的js变量处理,例如var product;和var productPictures,但是当我根据服务的响应设置数据时,它们仍然是链接的。
$api.productpage.query({
id: parseInt($stateParams.productId)
}, function (data) {
$scope.product = data[0];
$scope.productPictures = data[0]['Images'];
});
我是否忽视了一些超级微不足道的事情?我是否应该在单独的服务请求中管理产品图像?
答案 0 :(得分:5)
对象在javascript中通过引用传递。这意味着在此代码中
$scope.product = data[0];
$scope.productPictures = data[0]['Images'];
$scope.productPictures
指向同一个对象(我猜这是你的情况下的数组)为data[0].Images
。
要解决此问题,您需要克隆对象而不仅仅是引用。您可能需要检查angular.copy
方法:
$scope.productPictures = angular.copy(data[0].Images);
答案 1 :(得分:-1)
您在范围内创建两个变量而不是两个范围。
对象是通过引用传递的,所以如果你修改了一个,它会修改另一个。 也许尝试克隆对象
编辑使用angular.copy()而不是jquery.extend()
function myclone ( obj){
return jQuery.extend(true, {}, obj);
}