我在这个问题上找到的解决方案都没有让我满意。
我有一个控制器,可以创建,删除和复制项目。每当我复制一个项目时,他们显然会拥有相同的属性。然而,我希望能够区分和识别它们。还需要在原始项目之后插入重复的项目。
我想出了一些非常简单的解决方案:
$$hashKey
。我想第一个解决方案是最佳实践,因为我可以为此创建一个模块。第二种解决方案可能是最快的解决方案,但我不喜欢我需要一个计数器。第三种解决方案似乎根本不是一个好主意,因为这违背了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
};
}
答案 0 :(得分:1)
使用angular.copy
。这将执行深度复制,将角度识别为不同的对象。
当您在本机javascript中复制整个对象时出现的问题是,您还复制了内部ID,其角度基于其模型&lt; - &gt;视图映射。
以下是jsFiddle的更新版本,您可以在其中查看其实际效果。