复制相同的对象
Duplicate identical object
None 我找到的这个问题的解决方案令我满意。
我有一个控制器可以创建、删除和复制项目。每当我复制一个项目时,它们显然具有相同的属性。但我希望能够区分和识别它们。此外,重复项需要插入到原始项之后。
我想到了一些非常简单的解决方案:
- 生成唯一键并将其分配给创建的项目。
- 有一些 id 计数器,它在每个必须分配 ID 的项目中自增 1(或多或少与解决方案 1 相同;可能更快,但不必要地污染了代码)。
- 在数组中插入项目并重新渲染,以便它从 Angular.
获得 $$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
};
}
使用angular.copy
。这将执行深拷贝,angular 将其识别为不同的对象。
在原生 javascript 中复制整个对象时的问题在于,您还复制了 angular 其模型<->视图映射所基于的内部 ID。
这是您的 jsFiddle 的更新版本,您可以在其中看到它的实际效果。
None 我找到的这个问题的解决方案令我满意。
我有一个控制器可以创建、删除和复制项目。每当我复制一个项目时,它们显然具有相同的属性。但我希望能够区分和识别它们。此外,重复项需要插入到原始项之后。
我想到了一些非常简单的解决方案:
- 生成唯一键并将其分配给创建的项目。
- 有一些 id 计数器,它在每个必须分配 ID 的项目中自增 1(或多或少与解决方案 1 相同;可能更快,但不必要地污染了代码)。
- 在数组中插入项目并重新渲染,以便它从 Angular. 获得
$$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
};
}
使用angular.copy
。这将执行深拷贝,angular 将其识别为不同的对象。
在原生 javascript 中复制整个对象时的问题在于,您还复制了 angular 其模型<->视图映射所基于的内部 ID。
这是您的 jsFiddle 的更新版本,您可以在其中看到它的实际效果。