dou*_*oll 15 events scope complete digest angularjs
在我的AngularJS应用程序中,有几点我想等待$ scope处理到DOM中,然后在其上运行一些代码,例如jquery fadeIn.
有没有办法监听某种digestComplete消息?
我当前的方法是,在设置我想要呈现的任何$ scope变量之后立即使用延迟为0 ms的setTimeout,这样它将让范围完成消化,然后运行完美的代码.唯一的问题是,我偶尔会在setTimeout返回之前看到DOM渲染.我想要一种方法,保证在摘要之后和渲染之前触发.有任何想法吗?
Mar*_*cok 15
在这个jQuery淡入淡出小提琴(我在JSFiddles示例维基页面上找到它)中,作者定义了一个"fadey"指令并在指令的link函数中执行jQuery fadeIn(或fadeOut)"
<li ng-repeat="item in items" fadey="500">
...
myApp.directive('fadey', function() {
return {
restrict: 'A',
link: function(scope, elm, attrs) {
var duration = parseInt(attrs.fadey);
if (isNaN(duration)) {
duration = 500;
}
elm = jQuery(elm); // this line is not needed if jQuery is loaded before Angular
elm.hide();
elm.fadeIn(duration)
Run Code Online (Sandbox Code Playgroud)
另一个可能的解决方案是使用$ evalAsync:请参阅Miško的评论,其中他说:
asyncEval在DOM构造之后但在浏览器呈现之前.我相信这是你想要附加jquery插件的时间.否则你会有闪烁.如果你真的想在浏览器渲染后做,你可以做$ defer(fn,0);
($ defer被重命名为$ timeout).
但是,我认为使用指令(因为您正在操作DOM)是更好的方法.
这是一个SO帖子,其中OP尝试在范围上监听$ viewContentLoaded事件(这是另一种选择),以便应用一些jQuery函数.建议/答案再次使用指令.
| 归档时间: |
|
| 查看次数: |
15867 次 |
| 最近记录: |