如何以角度克隆对象?

时间:2015-09-05 16:14:41

标签: angularjs

我有这种嵌套状态:

  .state("inspectionsBuilder.view", {
                    url: "/:inspectionId",
                    templateUrl: "app/inspectionsBuilder/templates/inspectionsBuilder.tmpl.html",
                    controller: "inspectionsBuilderController",
                    controllerAs: "builder",
                    resolve: {
                        inspectionCurrentIFrame: ["getCurrentIFrameService", inspectionGetCurrentListIFrameResolver]
                    },
                })

以下是从resolve调用的函数:

function inspectionGetCurrentListIFrameResolver(getCurrentIFrameService) {
    return getCurrentIFrameService;

}

getCurrentIFrameService - 返回一些DOM元素的工厂服务。

来自inspectionGetCurrentListIFrameResolver函数我想要克隆getCurrentIFrameService服务并返回它。

function inspectionGetCurrentListIFrameResolver(getCurrentIFrameService) {
    var elem = null; 
    var result =  angular.copy(getCurrentIFrameService,elem);
    return elem;
}

但它不起作用。任何想法我错过了什么?

2 个答案:

答案 0 :(得分:1)

根据the manual

  

复制源的目标。如果提供,必须是   与来源相同的类型。

当变量引用(elem)传递给函数(angular.copy)时,它不能被重新赋值,这就是变量应该是对象或数组的原因,因此可以添加/删除它的属性。

正确的方法是

var result = angular.copy(getCurrentIFrameService);

var elem = {}; 
var result = angular.copy(getCurrentIFrameService, elem);

答案 1 :(得分:0)

单身人士的服务不是吗?

如果你有一个构造函数/工厂以json球为参数,你可以使用Lodash深度克隆一个任意嵌套的json球,然后传递它来创建任何对象的克隆。

您可以将状态读入对象,并将其传递给构造函数,假设它们属于同一类型,或者可以从另一个派生。