javascript - AngularJS 从作用域创建新的作用域

标签 javascript angularjs isolate-scope

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

我调用我的服务并获得返回的预期数据。我希望单独存储图片,因为我需要修改数组并将其解析为新的范围。我不明白的是,我现在已经创建了 2 个范围,product 和 productPictures - 为什么它们仍然链接在一起?

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

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

最佳答案

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

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

$scope.productPictures 指向与 data[0].Images 相同的对象(我想这是你的情况下的数组)。

要克服这个问题,您需要克隆对象而不仅仅是引用。您可能想查看 angular.copy方法:

$scope.productPictures = angular.copy(data[0].Images);

关于javascript - AngularJS 从作用域创建新的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30071415/

相关文章:

javascript - 将 javascript 变量传递到 angularJS 范围

javascript - 为什么我的 Angular Directive(指令)没有在隔离范围内获取父 Controller 范围?

javascript - 多次调用编码的 COM 接口(interface)

javascript - webpack 是否会删除生产中附加到 `window` 的自定义变量或事件监听器?

Javascript:如何确定链接是否指向与其所在页面相同的域?

angularjs - ngChange 在 value 超出隔离范围之前触发

javascript - 隔离 AngularJS 范围、放弃依赖注入(inject)、可重用组件

javascript - jQuery validate.js 仅电子邮件未被验证

javascript - $q 服务——我应该在新的 AngularJS 应用程序中使用 CommonJS 风格还是构造函数风格?

javascript - Angularjs 登录应用程序?