我们尝试了angular.copy和angular.extend。但是,这两个都复制了属性值。我们如何将一个对象的属性(没有它们的值)复制到另一个对象?
以下是基于fiddle我们尝试的how-to-quickly-clear-a-javascript-object。
angular.module('App', []);
function Ctrl($scope) {
function copyNotValues(obj) {
var newObj = angular.copy(obj);
for (prop in newObj) {
if(newObj.hasOwnProperty(prop))
{
newObj[prop] = null;
}
};
return newObj;
}
$scope.master = {
foo: 'original foo',
bar: 'original bar'
};
$scope.copy = angular.copy($scope.master);
$scope.extend = angular.extend($scope.master);
$scope.copyNotValues = copyNotValues($scope.master);
}
答案 0 :(得分:2)
JavaScript没有类的概念。它使用Prototype继承,这意味着您只能通过复制另一个对象来创建新对象。这样做可以获得属性。
您可以通过创建没有属性值的“主”对象来解决这个问题。像这样:
master = {
foo: '',
bar: ''
};
然后,您可以使用new关键字创建对象的新“实例”:
$scope.master = new master();
$scope.master.foo = 'original foo';
$scope.master.bar = 'original bar';
当您需要创建对象的新实例时,请返回原始实例,而不是您的副本:
$scope.masterCopy = new master();
这实际上是一个JavaScript问题,而不是Angular特定问题。理论上,我认为你可以编写一个函数来创建一个对象的新实例,然后遍历这些属性,将它们全部设置为null或空字符串。
答案 1 :(得分:0)
我的解决方案如下 您可以使用angular.copy并传递该对象。在使用空白花括号定义对象之前。代码如下。我使用了其他一些示例,但下划线方法是相同的。
angular.module('formExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.sa = {}; //declaring sa object
$scope.ba = {}; //declaring ba object
$scope.update = function() {
$scope.ba = angular.copy($scope.sa);
};
}]);

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example - example-example32-production</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-beta.2/angular.min.js"></script>
</head>
<body ng-app="formExample">
<div ng-controller="ExampleController">
<form novalidate class="simple-form">
<h3>Shipping Address</h3>
Name:<input type="text" ng-model="sa.name" ng-change="sameAddress && update()" placeholder="in" /><br/> Age:
<input type="text" ng-model="sa.age" ng-change="sameAddress && update()" placeholder="age" />
<br /> Street:
<br />
<h3>Billing Address
<input type="checkbox" ng-model="sameAddress" ng-change="sameAddress && update()" />Copy
</h3>
Name:<input type="text" ng-model="ba.name" ng-disabled="sameAddress" placeholder="out" /><br/> Age:
<input type="text" ng-model="ba.age" ng-disabled="sameAddress" placeholder="age" />
<br />
<br />
</form>
</div>
</body>
</html>
&#13;
选手是here