首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS从作用域创建新作用域

AngularJS从作用域创建新作用域
EN

Stack Overflow用户
提问于 2015-05-06 16:31:06
回答 2查看 74关注 0票数 1

我真的不明白为什么这段代码是这样工作的。

我调用我的服务并获得返回的预期数据。我希望单独存储图片,因为我需要修改数组,并根据新的作用域对其进行不同的解析。我不明白的是,我现在已经创建了两个作用域,产品和productPictures --为什么它们仍然是联系在一起的?

如果我对_.sort() productPictures使用Lodash,那么scope.Product中的图像对象也会被改变,但是我不希望这种情况发生,我也不知道如何隔离$scope.productPictures。我尝试将作用域作为简单的js变量来处理,例如var product;和var productPictures,但是当我根据来自服务的响应设置它们的数据时,它们仍然是链接的。

代码语言:javascript
复制
$api.productpage.query({
    id: parseInt($stateParams.productId)
}, function (data) {
    $scope.product = data[0];

    $scope.productPictures = data[0]['Images'];
});

我是不是忽略了一些非常微不足道的事情?我是否应该在单独的服务请求中管理产品映像?

EN

回答 2

Stack Overflow用户

发布于 2015-05-06 16:34:48

在javascript中,对象通过引用传递。这意味着在这段代码中

代码语言:javascript
复制
$scope.product = data[0];
$scope.productPictures = data[0]['Images'];

$scope.productPictures指向与data[0].Images相同的对象(我猜在本例中是数组)。

为了解决这个问题,你需要克隆对象,而不仅仅是引用。您可能需要检查angular.copy方法:

代码语言:javascript
复制
$scope.productPictures = angular.copy(data[0].Images);
票数 5
EN

Stack Overflow用户

发布于 2015-05-06 16:35:31

您在作用域中创建了两个变量,而不是两个作用域。

对象是通过引用传递的,所以如果您修改一个对象,它就会修改另一个对象。也许可以试着克隆对象

编辑使用angular.copy()而不是jquery.extend()

代码语言:javascript
复制
function myclone ( obj){
   return jQuery.extend(true, {}, obj);  
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30071415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档