我不太了解为什么这件代码以其方式工作。
我致电我的服务并返回预期数据。我希望单独存储图片,因为我需要修改阵列并将其与新范围不同。我不明白的是,正如我现在创建了两个范围,产品和产品图片一样 - 为什么仍然链接?
如果我使用lodash到_.sort()productspictures,则示波器中的图像对象也将被更改,但是我不想发生这种情况,而且我不知道如何隔离$ scope.productuctictures.productuctictures。。我尝试将范围作为简单的JS变量(例如VAR产品)处理;和var Productspictures,但是当我根据服务的响应设置数据时,它们仍然链接。
$api.productpage.query({
id: parseInt($stateParams.productId)
}, function (data) {
$scope.product = data[0];
$scope.productPictures = data[0]['Images'];
});
我在俯瞰超级琐碎的东西吗?我应该宁愿在单独的服务请求中管理产品图像吗?
对象通过JavaScript中的参考传递。这意味着在此代码中
$scope.product = data[0];
$scope.productPictures = data[0]['Images'];
$scope.productPictures
指向同一对象(我猜这是您的情况中的数组)与 data[0].Images
。
要克服此问题,您需要克隆对象而不是仅引用。您可能需要检查angular.copy
方法:
$scope.productPictures = angular.copy(data[0].Images);
您在范围中创建两个变量,而不是两个范围。
对象通过参考传递,因此,如果修改一个对象,则对象则适用于另一个。也许尝试克隆对象
编辑使用angular.copy()而不是jquery.extend()
function myclone ( obj){
return jQuery.extend(true, {}, obj);
}