使用Angular将对象属性(没有值)复制到另一个对象

时间:2014-02-13 00:33:39

标签: javascript angularjs oop copy extend

我们尝试了angular.copyangular.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);

}

2 个答案:

答案 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;
&#13;
&#13;

选手是here