Je cherche à afficher des données dans une structure arborescente dans une application Web. J'espérais utiliser Angular pour cette tâche.
On dirait que ng-repeat me permettra d'itérer dans une liste de nœuds, mais comment puis-je faire une imbrication lorsque la profondeur d'un nœud donné augmente?
J'ai essayé le code suivant , mais l'échappement automatique du HTML l'empêche de fonctionner. De plus, la balise end ul est au mauvais endroit.
Je suis à peu près sûr que j'aborde ce problème dans le mauvais sens.
Des idées?
Réponses:
Jetez un œil à ce violon
Original: http://jsfiddle.net/brendanowen/uXbn6/8/
Mis à jour: http://jsfiddle.net/animaxf/uXbn6/4779/
Cela devrait vous donner une bonne idée de la façon d'afficher un en
tree like structure
utilisant angular. C'est une sorte d'utiliser la récursivité en html!la source
Si vous utilisez Bootstrap CSS ...
J'ai créé un simple contrôle d'arborescence réutilisable (directive) pour AngularJS basé sur une liste Bootstrap "nav". J'ai ajouté une indentation, des icônes et une animation supplémentaires. Les attributs HTML sont utilisés pour la configuration.
Il n'utilise pas de récursivité.
Je l'ai appelé angular-bootstrap-nav-tree (nom accrocheur, tu ne crois pas?)
Il y a un exemple ici , et la source est ici .
la source
Lorsque vous faites quelque chose comme ça, la meilleure solution est une directive récursive. Cependant, lorsque vous créez une telle directive, vous découvrez qu'AngularJS entre dans une boucle sans fin.
La solution pour cela est de laisser la directive supprimer l'élément pendant l'événement de compilation, puis de les compiler et de les ajouter manuellement dans les événements de lien.
J'ai découvert cela dans ce fil de discussion et j'ai résumé cette fonctionnalité dans un service .
Avec ce service, vous pouvez facilement créer une directive d'arborescence (ou d'autres directives récursives). Voici un exemple de directive d'arborescence:
Voir ce Plunker pour une démo. J'aime mieux cette solution parce que:
Mise à jour: Ajout de la prise en charge des fonctions de liaison personnalisées.
la source
angular-ui-tree semble faire du bon travail pour moi
la source
Voici un exemple utilisant une directive récursive: http://jsfiddle.net/n8dPm/ Tiré de https://groups.google.com/forum/#!topic/angular/vswXTes_FtM
la source
Celui-ci semble un peu plus complet: https://github.com/dump247/angular.tree
la source
Un autre exemple basé sur la source d'origine , avec un exemple d'arborescence déjà en place (plus facile à voir comment cela fonctionne IMO) et un filtre pour rechercher l'arborescence:
JSFiddle
la source
Tant de bonnes solutions, mais je pense qu'elles compliquent toutes un peu les choses d'une manière ou d'une autre.
Je voulais créer quelque chose qui recréait la simplicité du awnser de @Mark Lagendijk, mais sans que cela définisse un modèle dans la directive, mais laisserais plutôt "l'utilisateur" créer le modèle en HTML ...
Avec des idées tirées de https://github.com/stackfull/angular-tree-repeat etc ... j'ai fini par créer le projet: https://github.com/dotJEM/angular-tree
Ce qui vous permet de construire votre arbre comme:
Ce qui est pour moi plus propre que de devoir créer plusieurs directives pour des arbres structurés différemment .... En substance, appeler ce qui précède un arbre est un peu faux, cela en tire beaucoup plus de l'arène de "modèles récursifs" de @ ganaraj, mais nous permet de définir le modèle où nous avons besoin de l'arborescence.
(vous pouvez le faire avec un modèle basé sur une balise de script, mais il doit toujours se trouver juste à l'extérieur du nœud d'arbre réel, et cela semble toujours un peu yuk ...)
Laissé ici pour juste un autre choix ...
la source
Vous pouvez essayer avec l'exemple Angular-Tree-DnD avec Angular-Ui-Tree, mais j'ai édité, compatibilité avec table, grille, liste.
la source
Sur la base de l « @ganaraj réponse , et @ dnc253 » de la réponse , Je viens de faire un simple « directive » pour la structure d'arbre ayant la sélection, l' ajout, la suppression et la fonctionnalité d' édition.
Jsfiddle: http://jsfiddle.net/yoshiokatsuneo/9dzsms7y/
HTML:
JavaScript:
la source
Oui c'est certainement possible. La question ici suppose probablement Angular 1.x, mais pour référence future, j'inclus un exemple Angular 2:
Conceptuellement, tout ce que vous avez à faire est de créer un modèle récursif:
Vous liez ensuite un objet d'arbre au modèle et laissez Angular opérer sa magie. Ce concept est évidemment également applicable à Angular 1.x.
Voici un exemple complet: http://www.syntaxsuccess.com/viewarticle/recursive-treeview-in-angular-2.0
la source
Vous pouvez utiliser angular-recursion-injector pour cela: https://github.com/knyga/angular-recursion-injector
Vous permet de faire une imbrication de profondeur illimitée avec conditionnement. Ne recompilation que si nécessaire et ne compile que les bons éléments. Pas de magie dans le code.
L'une des choses qui lui permet de fonctionner plus rapidement et plus simplement que les autres solutions est le suffixe "--recursion".
la source
Lorsque l'arborescence est volumineuse, Angular (jusqu'à 1.4.x) devient très lent à rendre un modèle récursif. Après avoir essayé un certain nombre de ces suggestions, j'ai fini par créer une simple chaîne HTML et l'utiliser
ng-bind-html
pour l'afficher. Bien sûr, ce n'est pas la façon d'utiliser les fonctionnalités angulairesUne fonction récursive simple est présentée ici (avec un minimum de HTML):
Dans le modèle, il suffit de cette ligne:
Cela contourne toutes les liaisons de données d'Angular et affiche simplement le HTML en une fraction du temps des méthodes de modèle récursives.
Avec une structure de menu comme celle-ci (une arborescence de fichiers partielle d'un système de fichiers Linux):
La sortie devient:
la source
Pas compliqué.
code contrôleur:
la source