复制相同的对象

时间:2015-11-30 13:03:49

标签: angularjs duplicates unique

我在这个问题上找到的解决方案都没有让我满意。

我有一个控制器,可以创建,删除和复制项目。每当我复制一个项目时,他们显然会拥有相同的属性。然而,我希望能够区分和识别它们。还需要在原始项目之后插入重复的项目。

我想出了一些非常简单的解决方案:

  1. 生成唯一键并将其分配给创建的项目。
  2. 有一些id计数器,每个项目必须增加1个ID(与解决方案1大致相同;可能更快但不必要地污染代码)。
  3. 在数组中插入项目并重新渲染,以便从Angular获得$$hashKey
  4. 我想第一个解决方案是最佳实践,因为我可以为此创建一个模块。第二种解决方案可能是最快的解决方案,但我不喜欢我需要一个计数器。第三种解决方案似乎根本不是一个好主意,因为这违背了Angular的原则。

    我不知道它是否有用,但这里是fiddle

    HTML

    <div ng-app ng-controller="MyCtrl">
        <div ng-repeat="item in items">
            <p>{{item.id}}</p>
            <input type="submit" ng-click="duplicateItem(item)" value="Duplicate"></input>
            <input type="submit" ng-click="removeItem(item)" value="Remove"></input>
        </div>
    </div>
    

    JavaScript的:

    var myApp = angular.module('myApp', []);
    
    //myApp.directive('myDirective', function() {});
    //myApp.factory('myService', function() {});
    
    function MyCtrl($scope) {
        $scope.items = [
            {
                type: 'text',
                id: 'ID_1' },
            {
                type: 'text',
                id: 'ID_2' }
        ];
    
        $scope.duplicateItem = function(item) {
            $scope.items.push(item);
        };
    
        $scope.removeItem = function(item) {
            // Removes item
        };   
    }
    

1 个答案:

答案 0 :(得分:1)

使用angular.copy。这将执行深度复制,将角度识别为不同的对象。

当您在本机javascript中复制整个对象时出现的问题是,您还复制了内部ID,其角度基于其模型&lt; - &gt;视图映射。

以下是jsFiddle的更新版本,您可以在其中查看其实际效果。

相关问题