2014-05-19 4 views
0

I ont directive infobulle inclus:question de la portée angulaire

<div class="wrapper" ng-repeat="item in items"> 
    <span tooltip="item.description" tooltip-model="item.display" tooltip-border="item.color" tooltip-enable="!!item.description"> 
     <span>{{$parent.item.label}} - {{$parent.item.display}}</span> 
    </span> 
</div> 

Le problème est que je dois utiliser $parent si je veux faire référence à item du modèle. Y at-il un moyen de le faire fonctionner sans $parent? Mon code de directive ressemble à ceci (j'utilisais Angular UI bootsrap tooltip comme référence mais je ne sais pas pourquoi il utilise $ eval et $ observe s'il peut lier des attributs avec = dans la portée, il utilise une portée isolée car il utilise true pour la propriété)

.directive('tooltip', ['$compile', function($compile) { 
    var template = '<div class="description-popup" ng-style="{borderColor: color}" ng-class="{top:!bottom,bottom:bottom}">' + 
         '<p>{{content}}</p>' + 
         '<span class="close icon-cancel-1"></span>' + 
         '<span class="arrow" ng-style="{borderColor: color}"></span>' + 
        '</div>'; 
    return { 
     scope: { 
      color: '=tooltipBorder', 
      enable: '=tooltipEnable', 
      content: '=tooltip', 
      model: '=tooltipModel' 
     }, 
     compile: function(element, attrs) { 
      var linkerFn = $compile(template); 
      return function link(scope, element, attrs) { 
       var tooltip = linkerFn(scope, function(){}); 
       element.after(tooltip); 

       ... 

      }; 
     } 
    }; 
}]); 

J'utilise angulaire 1.0.6 travail de portée si isolé de manière différente. Portée n'hérite pas du parent.

+1

Vous pouvez passer l'objet élément complet dans la portée isolée et cela devrait fonctionner. – Chandermani

Répondre

0

Il suffit de passer l'objet de l'article aussi:

scope: { 
     color: '=tooltipBorder', 
     enable: '=tooltipEnable', 
     content: '=tooltip', 
     model: '=tooltipModel', 
     item: '=' 
    } 


<span item='item'> 

Juste par curiosité, pourquoi utilisez 1.0.6 vous?

+0

Que diriez-vous d'utiliser l'élément 'ng-repeat =" dans les éléments "' il va se casser. Je ne contrôle pas la version d'Angular, probablement la plate-forme a été créée quand le dernier était 1.0.6, et maintenant il est difficile de passer à 1.2. – jcubic

+0

Malheureusement, cela dépasse mon expertise. Personnellement, je tirerais pour une mise à jour. Plus vous attendez, plus cela devient difficile. – Sprottenwels

+0

Si vous utilisez 'element' au lieu de item, alors faites' item = element' – Chandermani