2013-04-22 51 views
3

我寫上使用資源管理(動態加載等)和JQuery AngularJS像手風琴效果Rails的Ruby的應用,淡入出等AngularJS,jQuery和onload事件

當我想顯示我在頁面上的數據我使用Angular JS控制器從資源查詢數據,然後使用ng-repeat和ng-show相應地顯示它們。當這完成後,我需要設置JQuery onclick事件來添加效果(Accordion是特定的)。不幸的是,我找不到一個事件,當所有的DOM組件都被加載並且所有的Angular消化完成時都會被調用。這意味着JQuery的onload事件不起作用,並且試圖使用像ng-repeat finish event 這樣的指令,即會產生一個已經進行摘要的錯誤。

AngularJS是非常新的,我很難找到好的文檔。

有沒有人有任何想法? 謝謝!

+0

你試過從你鏈接的問題,這個例子: – lucuma 2013-04-22 16:28:03

+0

爲什麼我們解決你的問題http://plnkr.co/edit/icWaAW? – 2013-04-23 06:58:58

回答

2

你可以把你的jQuery代碼在$應用,如:

$scope.$apply(function() { 
    // jQuery stuff here 
}); 

如果它觸發錯誤,如 「正在進行消化」,你可以使用setTimeout

setTimeout(function(){ 
    $scope.$apply(function() { 
     // jQuery stuff here 
    }); 
}); 

指令方式:

//Directive - STRART 
.directive("yourNameHere", function() { 
    return function(scope, element, attrs) { 
     $(element).jQueryStuffHere(); 
    }; 
})//Directive -END 

希望它能幫助, 乾杯

3

在使用jQuery來初始化Accordion之前,您必須等到ng-repeat完成。

這是一個指令(http://jsfiddle.net/tQw6w/);它調用指定的函數時真:

.directive('repeatDone', function() { 
    return function(scope, element, attrs) { 
     if (scope.$last) { // all are rendered 
      scope.$eval(attrs.repeatDone); 
     } 
    } 
}) 

和HTML:

<ul> 
    <li ng-repeat="feed in feedList" repeat-done="layoutDone()" ng-cloak> 
     <a href="{{feed}}" title="view at {{feed | hostName}}" data-toggle="tooltip">{{feed | strip_http}}</a> 
    </li> 
</ul> 

,並在控制器內的功能:

$scope.layoutDone = function() { 
    $timeout(function() { $('a[data-toggle="tooltip"]').tooltip(); }, 0); // wait... 
} 

我發現,$暫停時以間隔= 0在進行DOM操作之前,如初始化小提琴中的工具提示或手風琴。

回答以前在這裏:https://stackoverflow.com/a/16142327/2275421