我已经能够使用jQuery UI排序成功排序/排列标签。如果您有建议或改进,请随时分享!
angular.module('myApp', ['ngMaterial', 'ngMessages'])
.controller('myController', function($scope, $timeout) {
$scope.items = ['Item #1', 'Item #2', 'Item #3', 'Item #4', 'Item #5']
$scope.sort = function() {
var tabs = $("#sortable").sortable({
"items": "md-tab-item",
"axis": "x",
"start": function(event, ui) {
ui.item.startPos = ui.item.index();
},
"stop": function(event, ui) {
var oldIndex = ui.item.startPos;
var newIndex = ui.item.index();
var backward = oldIndex > newIndex;
$scope.items.splice(newIndex + (backward ? 0 : 1), 0, $scope.items[oldIndex]);
$scope.items.splice(oldIndex + (backward ? 1 : 0), 1);
$timeout();
}
});
}
});
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0-rc2/angular-material.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-animate.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-aria.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-messages.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0-rc2/angular-material.min.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<div ng-app="myApp" ng-controller="myController">
<md-content>
<md-tabs md-dynamic-height md-border-bottom ng-init="sort()" id="sortable">
<md-tab label="Tab: {{$index+1}}" ng-repeat="item in items">
<md-content class="md-padding">
{{item}}
</md-content>
</md-tab>
</md-tabs>
</md-content>
</div>
不要忘了破坏排序当你的指令范围被破坏。我不知道空闲暂停是什么时候,但你也应该清理它。 –
顺便说一句,如果我拖放标签,然后他们似乎显示错误的内容... –
@TJ感谢您的意见。空的'$ timeout'是安全地调用'$ scope.apply()'的一种方法。这是必需的,因为摘要循环在拖放(jquery可排序)后触发,但调用一个空的'$ timeout'就可以做到这一点(没有其他摘要循环正在运行)。关于你的第二个评论,你能否给我更多的细节。我没有看到任何错误? – supersan