地带或者覆盖AngularJS $资源(Strip or overwrite an AngularJ

2019-10-19 03:09发布

我需要将数据从一个资源复制到另一个。 问题是, $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的方法。

Answer 1:

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


文章来源: Strip or overwrite an AngularJS $resource