Angularjs从范围创建新范围



我不太了解为什么这件代码以其方式工作。

我致电我的服务并返回预期数据。我希望单独存储图片,因为我需要修改阵列并将其与新范围不同。我不明白的是,正如我现在创建了两个范围,产品和产品图片一样 - 为什么仍然链接?

如果我使用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);  
}

最新更新