2012-08-16 85 views
5

我在angularJS中使用jquery UI選項卡,並使用ng-repeat生成列表項和選項卡容器。標籤正在工作,但標籤容器工作不正常。Jquery UI選項卡在AngularJS中不起作用

模板 - 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> 

指令

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

的jsfiddle鏈接:http://jsfiddle.net/sannitesh/NLw6y/

+0

你解決了這個問題嗎?我有同樣的問題。 – thomas 2014-04-24 08:45:07

+0

我被小提琴弄糊塗了。 JSFiddle無法正常工作? – 2014-11-12 01:26:10

回答

1

的問題是,當ngTabs指令被執行的內容div還沒有生成。在setTimeout中將調用包裝爲.tabs()會起到一定作用。

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

看到jsFiddle。這可能不是最好的方式/角度方式。

您可以看看compile服務,特別是如果實際選項卡在運行時更改。

+0

他不應該使用$ timeOut服務嗎? – uriDium 2013-09-16 08:46:45

+0

@uriDium如果他想觸發一個$ scope。$ apply則是,但如果它是一個純粹的視覺效果,那麼沒有必要,該指令不會修改範圍數據,所以沒有什麼可應用的 – 2013-09-16 10:59:03

+0

我只是認爲$ timeout是保證在任何摘要或應用階段之外執行,並在當前階段結束後立即執行。我只是覺得它更安全。 – uriDium 2013-09-16 11:59:28