我需要将数据从一个资源复制到另一个资源。问题是当旧资源包装在新资源中时,旧资源上的$get
,$save
等方法仍然存在。
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
方法之外,对象需要从模板继承所有属性。
答案 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;
});