【问题标题】:How to sort angular tabs created with material design using jquery ui sortable?如何使用可排序的 jquery ui 对使用材料设计创建的角度选项卡进行排序?
【发布时间】:2016-05-31 17:30:05
【问题描述】:

我试图创建一种使用 jquery ui sortable 对angular material tabs 进行排序(或排列)的方法。我尝试使用ui.sortable,但它不适用于md-tabs,因为我收到一个错误multiple directives trying to create an isolated scope

无论如何,所以我已经能够使用 jquery ui sortable 成功地对选项卡进行排序/排列。在这里分享它以防其他人将来需要它(因为在 SO 或任何其他网站上都有 0 个结果)。

【问题讨论】:

    标签: javascript jquery angularjs jquery-ui angular-material


    【解决方案1】:

    我已经能够使用 jquery ui sortable 成功地对标签进行排序/排列。如果您有任何建议或改进,也请随时分享!

    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 感谢 cmets。空的$timeout 是一种安全调用$scope.apply() 的方式。这是必需的,因为在拖放后会触发摘要循环(jquery 可排序),但调用空的$timeout 会执行此操作(确保没有其他摘要循环正在运行)。另外关于你的第二条评论,你能不能给我更多的细节。我没有看到任何错误?
    猜你喜欢
    • 2021-07-03
    • 2021-03-04
    • 2019-03-16
    • 1970-01-01
    • 2016-06-19
    • 2019-04-07
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多