я придумал очень странное поведение в угловых 1.3:Weird поведения Угловой +1,3 при копировании элемент в NG-повторе
Это происходит, когда я меняю
{{item}}
в:
{{::item}}
и нажмите кнопку «Копировать»; что он должен сделать, это скопировать элемент по указанному индексу и поместить его под исходный элемент. Вместо этого он копирует последний элемент из списка и добавляет его внизу списка!
HTML:
<div ng-app="myApp">
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="item in items track by $index">{{::item}}</li>
</ul>
<input ng-model="newItem" type="text"></input>
<button ng-click="add(newItem)">Add</button>
<button ng-click="copy(newItem)">Copy</button>
</div>
</div>
JavaScript:
var app = angular.module('myApp', []);
app.controller('MyCtrl', function($scope) {
$scope.items = ["A", "B", "C", "D"];
$scope.add = function(item) {
$scope.items.push(item);
};
$scope.copy = function(item) {
var newItem = angular.copy($scope.items[parseInt(item)]);
$scope.items.splice(parseInt(item) + 1, 0, newItem);
};
});
Кто знает, что происходит под капотом?
Вот Fiddle: http://jsfiddle.net/v87kgwud/14/
Как он узнает индекс? –
Если вы откроете JSFiddle; как вы видите, элемент должен быть введен в текстовое поле. И.Е. когда вы наберете 0 и нажмите «Копировать», он должен скопировать «A» и поместить его под исходный элемент. –
В принципе, я думаю, что AngularJS не вставляет новый элемент в DOM, он только толкает его в конце и обновляет соответствующие области. Но поскольку текстовое содержимое не может меняться (из-за одноразовой привязки), вы не можете увидеть разницу до и после копии. Я все еще ищу решение для вас и некоторые доказательства того, что я говорю. – Blackhole