2012-08-16 19 views
5

Estoy usando la pestaña jQuery UI en angularJS y uso ng-repeat para generar elementos de lista y contenedores de pestañas. Las pestañas funcionan, pero los contenedores de pestañas no funcionan correctamente.La pestaña IU de Jquery no funciona en AngularJS

plantilla - tabs.html

<ul ng-sortable="pages"> 
    <li ng-controller="pageCtrl" ng-repeat="page in pages"> 
     <a class="pageName" href="#{{page.id}}">{{page.name}}</a> 
    </li> 
</ul> 
<div id="{{page.id}}" ng-repeat="page in pages"> 
    <p>{{page.id}}</p> 
</div> 

Directiva

.directive('ngTabs', function($rootScope) { 
     return { 
      restrict: 'E', 
      templateUrl: "js/templates/tabs.html", 
      link: function(scope, elm) { 
       elm.tabs(); 
      } 
     }; 
    }) 

enlace jsFiddle: http://jsfiddle.net/sannitesh/NLw6y/

+0

¿Has resuelto esto? Estoy teniendo el mismo problema. – thomas

+0

Estoy confundido por el violín. ¿Qué no funciona bien con JSFiddle? –

Respuesta

1

El problema es que cuando la directiva ngTabs se ejecuta el contenido de ese div aún no se ha generado Envolver la llamada a .tabs() en un setTimeout hará el truco.

myApp.directive('ngTabs', function() { 
    return function(scope, elm) { 
     setTimeout(function() { 
      elm.tabs(); 
     },0); 
    }; 
}); 

ver jsFiddle. Esta podría no ser la mejor manera/la forma angular.

Puede echar un vistazo al servicio compile especialmente si las pestañas reales cambian en el tiempo de ejecución.

+0

¿No debería estar utilizando el servicio $ timeOut? – uriDium

+0

@uriDium Si quiere activar $ scope. $ Apply, entonces sí, pero si se trata de un efecto puramente visual, entonces no hay necesidad, la directiva no está modificando los datos del alcance por lo que no hay nada que aplicar –

+0

Solo pensé que $ timeout era garantizado para ejecutar fuera de cualquier resumen o aplicar fases e inmediatamente después de que se complete la fase actual. Solo pensé que era más seguro. – uriDium

Cuestiones relacionadas