首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测所有指令何时已加载?

如何检测所有指令何时已加载?
EN

Stack Overflow用户
提问于 2014-11-05 17:20:29
回答 1查看 1.5K关注 0票数 0

这是另一个问题(Angular: running function in controller when all directives are loaded)的派生,因为这个问题是一般性的。

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

编辑:

到目前为止,我发现的唯一方法是在最高级别设置一个指令,在它的链接函数期间触发一个作用域函数。这是因为角编译页面上从外部到内部的所有指令,并从内部到外部调用链接函数。

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

EDIT2:

我对一个类似的问题找到了一个很好的答案,这个问题描述了上面的问题。在评论中,j_walker_dev提到了以下内容:

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

所以问题:How to execute parent directive before child directive?

至少有一次可以继续使用templateUrls,因为它避免了在指令中加载模板的异步行为。

EN

回答 1

Stack Overflow用户

发布于 2014-11-06 17:41:16

这就是量角器同步的方式:

代码语言:javascript
复制
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);
  }
};

知道缓存中的指令将同步执行,并且需要从服务器加载模板的指令将在$browser通知之前执行,我将这样做(如果等待ajax请求而不是模板不是问题)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26763251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档