I was sure that i'll find a solution at SO , but with no luck. So i'll post my solution here , because it is not very trivial , may be it will be useful to someone, or someone will post something more elegant.
View:
<ul ng-controller="Ctrl">
<li ng-repeat="item in items">
<label>
Item {{$index}}. Order of Appearance:
<select ng-model="item.order" ng-options="o.order as (o.order+1) for o in items" ></select> {{item}}
</label>
</li>
</ul>
Controller:
function Ctrl( $scope , $filter ){
$scope.items = [ { order:0 } , { order:1 } , { order:2 } ]; // Default order
for(var i in $scope.items){
(function( item ) { // Tricky part , need to use IIFE
$scope.$watch( function(){ return item; }, function(n,o){
if(n == o) return;
var rel = $filter('filter')($scope.items, function( item_for_filtering ){
// Filtering previous element with same order
return (item_for_filtering.order == n.order && item_for_filtering!= n)
} )[0];
if(rel)
rel.order = o.order; // Giving prev element new order
},true );
})( $scope.items[i] );
}
}
Working Example: http://jsfiddle.net/cherniv/D3zd8/