剥离或覆盖AngularJS $资源

时间:2013-12-19 13:35:03

标签: angularjs angular-resource

我需要将数据从一个资源复制到另一个资源。问题是当旧资源包装在新资源中时,旧资源上的$get$save等方法仍然存在。

示例:http://plnkr.co/edit/d2oHwm?p=preview

var myApp = angular.module('myApp', ['ngResource'])

myApp.controller('MyCtrl', function($scope, $resource) {

    var ResourceA = $resource('A');

    var ResourceB = $resource('B');

    var instances = {};
    instances.A = new ResourceA({
        label: "Loading..."
    });

    instances.B = new ResourceB(instances.A); // <-- trouble

    instances.B.$get(function() {
        $scope.instances.B = arguments[0]
    });

    $scope.instances = instances;
});

我不想使用ResourceA的干净数据保留单独的对象,因为可以在多个位置修改对象。我也不想写一个foreach循环来获取纯数据。

我可以在没有魔术方法的情况下获得ResourceA中纯数据的副本吗?或者是否有其他方法可以忽略/剥离/覆盖资源中的魔术方法?

背景信息:用户可以创建/修改模板(resourceA)。用户可以使用该模板创建新对象(ResourceB)。发生这种情况时,除了$resource方法之外,对象需要从模板继承所有属性。

1 个答案:

答案 0 :(得分:3)

Angular.toJson方法将从对象中剥离以美元为前缀的属性。因此,此方法与angular.fromJson配对,将为您提供“干净”的资源:

var myApp = angular.module('myApp', ['ngResource']);

myApp.controller('MyCtrl', function($scope, $resource) {

  var ResourceA = $resource('A');

  var ResourceB = $resource('B');

  var instances = {};
  instances.A = new ResourceA({
      label: "Loading A ..."
  });

  var copy = angular.fromJson(angular.toJson(instances.A));
  instances.B = new ResourceB(copy);

  instances.B.$get(function(response) {
      $scope.instances.B = response;
  });

  $scope.instances = instances;
});