【问题标题】:What is the use of angular.copy in this situation?angular.copy 在这种情况下有什么用?
【发布时间】:2016-05-12 02:07:57
【问题描述】:

我指的是表单发布上的这段代码,对应于简单表单上的角度文档。

angular.copy 在这里有什么用?在删除 angular.copy 的情况下,代码似乎仍然可以正常工作。

<div ng-controller="ExampleController">
  <form novalidate class="simple-form">
    Name: <input type="text" ng-model="user.name" /><br />
    E-mail: <input type="email" ng-model="user.email" /><br />
    Gender: <input type="radio" ng-model="user.gender" value="male" />male
    <input type="radio" ng-model="user.gender" value="female" />female<br />
    <input type="button" ng-click="reset()" value="Reset" />
    <input type="submit" ng-click="update(user)" value="Save" />
  </form>
  <pre>user = {{user | json}}</pre>
  <pre>master = {{master | json}}</pre>
</div>

<script>
  angular.module('formExample', [])
    .controller('ExampleController', ['$scope', function($scope) {
      $scope.master = {};

      $scope.update = function(user) {
        $scope.master = angular.copy(user);
      };

      $scope.reset = function() {
        $scope.user = angular.copy($scope.master);
      };

      $scope.reset();
    }]);
</script>

【问题讨论】:

  • angular.copy 打破相同的引用,如果你不使用 angular.copy 那么 master,用户是相同的实例,虽然它的对象名称不同
  • 复制一个对象以防止其他代码修改它。 (原始对象可能会更改,但您的副本不会看到更改)。请参阅What is the benefit of angular.copy? 了解更多信息。

标签: angularjs


【解决方案1】:

angular.copy() 制作联系人对象的深层副本。原因是用户被覆盖了(你可以通过调试点看到)。

read here angular.copy() 可以执行参数的深层复制(参见“克隆”) - 本质上是创建一个新对象 - 而使用赋值运算符 = 只是分配引用。

因此在后一种情况下,如果您要更改 $scope.master 中的某些内容,您也会更改上下文。

【讨论】:

    猜你喜欢
    • 2015-01-30
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2014-05-05
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多