2013-04-22 53 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