Angular.jsでng-repeatの内容をドラッグ&ドロップで入れ替えられるようにしてみます。
サンプルコード
ui-sortableを使用します。
jQueryとjQuery UIも必要になるので、合わせて読み込ませるようにしてください。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script> <script src="sortable.min.js"></script>
HTML
入れ替えを行う要素の親要素にui-sortableとng-modelを指定します。
<div ng-controller="ctrl">
	<ul ui-sortable ng-model="items">
		<li ng-repeat="item in items">{{ item }}</li>
	</ul>
</div>
JavaScript
var myAppModule = angular.module('app', ['ui.sortable'])
myAppModule.controller('ctrl', function($scope) {
	$scope.items = ['クザク', 'ランタ', 'ハルヒロ', 'ユメ', 'メリイ', 'シホル'];
});
ng-repeatをドラッグ&ドロップで入れ替えのデモページ
 
オプションの設定
HTML
オプションを設定する場合、ui-sortableに値を指定します。
<div ng-controller="ctrl">
	<ul ui-sortable="sortableOptions" ng-model="items">
		<li ng-repeat="item in items">{{ item }}</li>
	</ul>
</div>
JavaScript
ui-sortableに指定した値(sortableOptions)にオプションを設定します。
var myAppModule = angular.module('app', ['ui.sortable'])
myAppModule.controller('ctrl', function($scope, $timeout) {
	$scope.items = ['クザク', 'ランタ', 'ハルヒロ', 'ユメ', 'メリイ', 'シホル'];
	$scope.sortableOptions = {
		axis: 'y', // 縦方向のみの移動にする
		cursor: 'move', // カーソルの変更
		update: function() { // 移動後に発火
			$timeout(function() {
				console.log($scope.items);
			});
		}
	};
});
オプション設定のデモページ
オプションについて詳しくは、jQuery UIのSortable Widgetのオプションをご確認ください。
 
ドラッグ&ドロップの対象を変更する
移動する要素はliのままで、ドラッグ&ドロップの対象要素をli内の一部にしてみます。
HTML
.handleを対象にしてみます。
<div ng-controller="ctrl">
	<ul ui-sortable="sortableOptions" ng-model="items">
		<li ng-repeat="item in items"><div class="handle"></div>{{ item }}</li>
	</ul>
</div>
CSS
.handle {
	display: inline-block;
	width: 30px;
	height: 30px;
	vertical-align: middle;
	margin-right: 5px;
	background: #666666;
}
JavaScript
オプションのhandleを設定します。
var myAppModule = angular.module('app', ['ui.sortable'])
myAppModule.controller('ctrl', function($scope, $timeout) {
	$scope.items = ['クザク', 'ランタ', 'ハルヒロ', 'ユメ', 'メリイ', 'シホル'];
	$scope.sortableOptions = {
		handle: '.handle'
	};
});
スマートフォンに対応する
jQuery UI Touch Punchを使用します。
基本的には読み込みにjQuery UI Touch Punchを追加するだけで大丈夫なはずです。
<script src="jquery.ui.touch-punch.min.js"></script>
【参考サイト】
- AngularJSで、リストをドラック&ドロップで入れ替える為のメモ – Qiita
- [AngularJS] UI.Sortable を使ったドラッグ&ドロップ UI の構築 | Developers.IO
- Sortable Widget | jQuery UI API Documentation
- iPhone/iPadでjQuery UIのsortable,resizeableなどに対応する | RaQoolスタッフブログ

コメントが承認されるまで時間がかかります。