Ни одно из решений, которые я нашел для этого вопроса, не удовлетворяет меня.
У меня есть контроллер, который создает, удаляет и дублирует элементы. Всякий раз, когда я дублирую элемент, у них, очевидно, будут одинаковые свойства. Тем не менее я хочу уметь различать и идентифицировать их. Также дублированный элемент необходимо вставить сразу после исходного элемента.
Есть несколько действительно простых решений, которые я придумал:
$$hashKey
чтобы он получил $$hashKey
из Angular.Я полагаю, что первое решение было бы лучшей практикой, так как я могу создать для этого модуль. Второе решение, вероятно, будет самым быстрым решением, но мне не нравится тот факт, что мне нужен счетчик. Третье решение кажется не совсем хорошей идеей, поскольку это противоречит принципам Углового.
Я не знаю, пригодится ли это, но здесь скрипка.
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
. Это будет выполнять глубокую копию, которая будет распознана угловым как другой объект.
Проблема, когда вы просто дублируете весь объект в собственном javascript, заключается в том, что вы также копируете внутренний идентификатор, на котором угловая база отображает его модель <->.
Вот обновленная версия вашего jsFiddle, где вы можете увидеть ее в действии.
$$hashKey
журнал, и вы должны увидеть свойство$$hashKey
для элементов.