web-dev-qa-db-ja.com

angularjsの表の行のソートまたは再配置(ドラッグアンドドロップ)

テーブル内の行を並べ替える機能(ドラッグアンドドロップを使用して行を並べ替える)が必要でした。 そして、行配置のインデックスもモデル内で変更する必要があります。

これに似た何かを行うにはどうすればよいですか? http://jsfiddle.net/tzYbU/1162/ using Angular Directive?

私はテーブルを生成しています:

<table id="sort" class="table table-striped table-bordered">
  <thead>
    <tr>
      <th class="header-color-green"></th>
      <th ng-repeat="titles in Rules.Titles">{{titles.title}}</th>
    </tr>
  </thead>
  <tbody ng-repeat="rule in Rules.data">
    <tr>
      <td class="center"><span>{{rule.ruleSeq}}</span></td>
      <td ng-repeat="data in rule.ruleData">{{statusArr[data.value]}}</td>
    </tr>
  </tbody>
</table>
26
Sushrut

やったよ。以下の私のコードを参照してください。

HTML

<div ng:controller="controller">
    <table style="width:auto;" class="table table-bordered">
        <thead>
            <tr>
                <th>Index</th>
                <th>Count</th>
            </tr>
        </thead>
        <tbody ui:sortable ng:model="list">
            <tr ng:repeat="item in list" class="item" style="cursor: move;">
                <td>{{$index}}</td>
                <td>{{item}}</td>
            </tr>
        </tbody>{{list}}
        <hr>
</div>

ディレクティブ(JS)

var myapp = angular.module('myapp', ['ui']);

myapp.controller('controller', function ($scope) {
    $scope.list = ["one", "two", "thre", "four", "five", "six"];
});

angular.bootstrap(document, ['myapp']);
48
Sushrut

別のライブラリがあります:RubaXa/Sortable: https://github.com/RubaXa/Sortable

最新のブラウザ用であり、jQueryに依存しません。含まれているのはangularディレクティブです。今から確認します。

さらに、優れたタッチサポートを利用できます。

11
Thomas

AngularJSは、DOM要素のmanipulationではなく、extendページのHTML。

こちらをご覧ください question および this Wikipediaエントリー。

DOM操作の場合、jQuery/mootools/etcで問題なく対応できます(ヒント:jsFiddleリンクの例)。

おそらく、AngularJSを使用して要素の順序を追跡し、モデルを更新できます。ディレクティブを使用してこれを行う方法はわかりませんが、次のコードが役立つ可能性があります

_var MyController = function($scope, $http) {
    $scope.rules = [...];
    ...

}

var updateRules = function(rule, position) {
    //We need the scope
    var scope = angular.element($(/*controller_element*/)).scope(); //controller_element would be the element with ng-controller='MyController'

    //Update scope.rules
}
_

次に、リストの順序を変更するときに、変更されたルールとモデル内の新しい位置でupdateRules()を呼び出すだけです。

5

このようなことを望んでいるが、受け入れられた答えを理解していない人。これは、AngularJSのディレクティブI.Sortableで、配列とテーブルの行をドラッグアンドドロップで並べ替えることができます。

要件

JQuery v3.1+ (for jQuery v1.x & v2.x use v0.14.x versions)
JQueryUI v1.12+
AngularJS v1.2+

使用法

スクリプトファイルを読み込みます:アプリケーションでsortable.js:( here からこのsortable.jsを見つけることができます)

<script type="text/javascript" src="modules/directives/sortable/src/sortable.js"></script>

このソート可能ファイルの前に、JQuery、AngularJs、およびJQueryUI jsファイルが順番に含まれていることを確認してください。アプリケーションモジュールへの依存関係としてソート可能モジュールを追加します。

 var myAppModule = angular.module('MyApp', ['ui.sortable'])

フォーム要素にディレクティブを適用します。

<ul ui-sortable ng-model="items">
  <li ng-repeat="item in items">{{ item }}</li>
</ul>

開発ノート:

  1. ng-modelが必要であるため、ディレクティブはどのモデルを更新するかを認識します。
  2. ui-sortable要素には、ng-repeatを1つだけ含める必要があります
  3. モデルを操作するフィルター(filter、orderBy、limitToなど)は、ng-repeatではなくコントローラーに適用する必要があります

3番目のポイントは、ソートが機能しなかった理由を理解するのに1時間近くかかったため、非常に重要ですか?これは、htmlのorderByが原因で、ソートが再度リセットされていました。

詳細については、詳細を確認してください here

2
Null Pointer

私があなたを正しく理解しているなら、あなたは行をソートできるようにしたいですか?その場合は、UI-Sortableを使用します。 GitHub Demo:codepen.io/thgreasi/pen/jlkhr

1
ionat

RubaXa/Sortableに加えて、angular-ui-treeという、もう1つのangularjsライブラリがあります。ドラッグアンドドロップに加えて、要素をツリー構造に配置し、要素(ノード)を追加および削除できます。

例については、このリンクを参照してください

http://angular-ui-tree.github.io/angular-ui-tree/#/basic-example

githubについてはこちらをご覧ください

https://github.com/angular-ui-tree/angular-ui-tree

1