2014-11-05 54 views
0

这是另一个问题的分支(Angular: running function in controller when all directives are loaded),因为这是一般性问题。如何检测所有指令何时加载?

如何检测页面上的所有角度指令何时加载?

编辑:

我发现到目前为止是建立在它的连接功能中触发范围功能,最高等级的指令的唯一方法。这适用于angular从外部到内部编译页面上的所有指令,并将链接函数从内部调用到外部。

缺点:如果任何内部指令使用templateUrl,则此操作不再有效,因为这将发生异步。这将导致外部指令链接函数在内部指令链接函数之前运行。此外,您必须为所有视图/包含添加指令。

EDIT2:

我发现了一个伟大的答案,它描述上述问题类似的问题。而在j_walker_dev提到了以下的评论:

The way i got around this was to use template, like mentioned. 
But to inject $templateCache and do template: $templateCache.get('url.tpl.html'). 

SO问题:How to execute parent directive before child directive?

至少在这个曾经可以继续使用templateUrls因为它避免了模板加载的指令异步行为。

+0

你是不是指index.html? – 2014-11-05 17:36:45

+0

在包含指令的任何html端。这也可以在ng-view或ng-include中。 – jimmy 2014-11-05 18:09:01

回答

0

这是怎么量角器同步:

functions.waitForAngular = function(rootSelector, callback) { 
    var el = document.querySelector(rootSelector); 
    try { 
    if (angular.getTestability) { 
     angular.getTestability(el).whenStable(callback); 
    } else { 
     angular.element(el).injector().get('$browser'). 
      notifyWhenNoOutstandingRequests(callback); 
    } 
    } catch (e) { 
    callback(e); 
    } 
}; 

知道,在缓存指令将同步执行,另一种需要从服务器加载模板$浏览器通知之前将执行,这是我会怎么做(如果等待Ajax请求的其他人比模板不是问题)

+0

听起来很有趣,我得看看。这个缺点似乎是这是一个内部API,因此不应该直接使用? – jimmy 2014-11-06 23:32:23

+0

getTestability'可能'是一个内部API(这将意味着在一个内部角度项目中的量角器,事实并非如此)。 'notifyWhenNoOutstandingRequests'实际上是公开的浏览器服务,可以自由使用 – 2014-11-07 08:35:38

相关问题