Partage
  • Partager sur Facebook
  • Partager sur Twitter

[AngularJs] Directives avec directives enfantes

    29 septembre 2016 à 10:44:31

    Bonjour, 

    j'ai besoin de réaliser une directive (enfin plutôt 4) représentée telle que : 

    <tree-view item="datas">
       <tree-view-root>
          <ul ng-transclude></ul>
       </tree-view-root>
       <tree-view-node>
          <li>{{name}}<ul ng-transclude></ul></li>
       </tree-view-node>
       <tree-view-leaf>
          <li>{{name}}</li>
       </tree-view-leaf>
    </tree-view>

    Ma directive treeView recoit un tableau d'objets sur lequel je dois réaliser un traitement permettant de créer une arborescence (d'où son nom ;)). 
    Mon problème est le suivant : comment puis-je traiter mon objet et faire passer mes données aux différentes directives enfantes sachant que suivant le type d'objet je dois choisir la directive treeViewNode ou treeViewLeaf. 

    Voici le code que j'ai testé pour le moment mais sans résultat : 

    myApp.directive('treeView', function() {
    	return {
      	restrict: 'E',
        scope: {
        	item: '=item'
        },
        transclude: true,
        controller: function () {
        	var lastNode = {};
        	scope.root = new RootNodeObject("root",0, 0,  						 													 scope.item[0].level-1, 0);
          lastNode[scope.item[0].level-1] = scope.root;
    
      		for(var i = 0; i<scope.item.length; i++) {
        		var iteratingObj = scope.item[i];
         		if(iteratingObj.g_rb - iteratingObj.g_lb > 1) {
          		var obj = new NodeObject(iteratingObj.name, 																			iteratingObj.g_rb, iteratingObj.g_lb,
           									iteratingObj.level, iteratingObj.groupId);
         		} else {
          		var obj = new LeafObject(iteratingObj.name, 																			iteratingObj.g_rb, iteratingObj.g_lb,
            								iteratingObj.level, iteratingObj.groupId);
         		}
    
           if(lastNode[iteratingObj.level - 1] !== undefined) {
              lastNode[iteratingObj.level - 1].addChild(obj);
           }
    
           if(obj instanceof NodeObject) {
              lastNode[iteratingObj.level] = obj;
           }
      	}
       },
       template: '<tree-view-root><tree-view-node ng-repeat="child in item.children"></tree-view-node></tree-view-root>'
      }
    });
    
    myApp.directive('treeViewRoot', function() {
    	return {
      	require: ['^^treeView'],
        transclude: true
      }
    });
    
    myApp.directive('treeViewNode', function() {
    	return {
      	require: ['^^treeView', '^^treeViewRoot'],
        transclude: true,
        template: '<tree-view-node ng-if="item.children !== undefined" ng-repeat="child in item.children" item="child"></tree-view-node><tree-view-leaf ng-if="item.children === undefined" ng-repeat="child in item.children" item="child"></tree-view-leaf>'
      }
    });
    
    myApp.directive('treeViewLeaf', function() {
    	return {
      	require: ['^^treeView', '^^treeViewRoot'],
        transclude: true
      }
    });

    Mes objets RootNodeObject, NodeObject possèdent un tableau de children pour contenir une arborescence de dossier. 

    Quelqu'un aurait-il déjà bosser sur un problème similaire contenant du coup de la récursivité ?



    • Partager sur Facebook
    • Partager sur Twitter

    [AngularJs] Directives avec directives enfantes

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown