AngularJS从范围创建新范围

时间:2015-05-06 08:31:06

标签: javascript angularjs isolate-scope

我真的不明白为什么这段代码会像它那样工作。

我调用我的服务并返回预期的数据。我希望单独存储图片,因为我需要修改数组并以不同方式解析新范围。我不明白的是,我现在已经创建了两个范围,产品和产品图片 - 为什么这些仍然存在?

如果我将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'];
});

我是否忽视了一些超级微不足道的事情?我是否应该在单独的服务请求中管理产品图像?

2 个答案:

答案 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);  
}