Je voulais avoir la possibilité de réorganiser les lignes dans un tableau (trier les lignes par glisser-déposer). Et l’index de la disposition des lignes devrait également changer dans le modèle.
Comment puis-je faire quelque chose de similaire à ceci: http://jsfiddle.net/tzYbU/1162/ En utilisant la Directive angulaire?
Je génère la table en tant que:
<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>
Je l'ai fait. Voir mon code ci-dessous.
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>
Directive (JS)
var myapp = angular.module('myapp', ['ui']);
myapp.controller('controller', function ($scope) {
$scope.list = ["one", "two", "thre", "four", "five", "six"];
});
angular.bootstrap(document, ['myapp']);
Il existe une autre bibliothèque: RubaXa/Sortable: https://github.com/RubaXa/Sortable
C'est pour les navigateurs modernes et sans dépendance jQuery. Inclus est une directive angulaire. Je vais vérifier maintenant.
Vous obtenez également un bon support tactile.
AngularJS n'était pas vraiment construit pour la manipulation d'éléments DOM, mais plutôt pour extend le code HTML d'une page.
Voir cette question et this entrée Wikipedia.
Pour la manipulation du DOM, jQuery/mootools/etc vous convient parfaitement (astuce: l'exemple de votre lien jsFiddle).
Vous pourriez probablement utiliser AngularJS pour suivre l'ordre de vos éléments afin de mettre à jour votre modèle. Je ne suis pas sûr de savoir comment faire cela en utilisant des directives, mais le code suivant peut être utile
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
}
Ensuite, lorsque vous réorganisez la liste, appelez simplement updateRules()
avec la règle modifiée et sa nouvelle position dans le modèle.
Si je vous ai bien compris, vous voulez pouvoir trier les lignes? Si c'est le cas, utilisez UI-Sortable: GitHub Demo: codepen.io/thgreasi/pen/jlkhr
En plus de RubaXa/Sortable, il existe une autre bibliothèque disponible: angular-ui-tree. En plus du glisser-déposer, nous pouvons organiser les éléments dans une arborescence et ajouter et supprimer des éléments (nœuds).
S'il vous plaît voir le lien pour des exemples
http://angular-ui-tree.github.io/angular-ui-tree/#/basic-example .
S'il vous plaît voir ceci pour github
Toute autre personne qui veut quelque chose comme ça mais qui ne comprend pas la réponse acceptée. Voici une directive UI.Sortable pour AngularJS qui vous permet de trier un rang/un tableau par glisser-déposer.
Exigences
JQuery v3.1+ (for jQuery v1.x & v2.x use v0.14.x versions)
JQueryUI v1.12+
AngularJS v1.2+
_ {Usage} _
Chargez le fichier script: sortable.js dans votre application: (vous pouvez trouver ce sortable.js de ici
<script type="text/javascript" src="modules/directives/sortable/src/sortable.js"></script>
assurez-vous que vous avez inclus les fichiers JQuery, AngularJs et JQueryUI js dans commander avant ce fichier triable Ajoutez le module triable en tant que dépendance à votre module d'application:
var myAppModule = angular.module('MyApp', ['ui.sortable'])
Appliquez la directive à vos éléments de formulaire:
<ul ui-sortable ng-model="items">
<li ng-repeat="item in items">{{ item }}</li>
</ul>
Notes de développement:
Le 3ème point est très important car il a fallu presque une heure pour comprendre pourquoi mon tri ne fonctionnait pas? C'était à cause de orderBy en html et c'était remettre le tri à nouveau.
Pour plus de compréhension, vous pouvez vérifier les détails ici .