检查是否存在Angular指令

时间:2013-09-11 23:40:34

标签: javascript angularjs

我们在Angular项目中围绕动态指令做了大量的工作,并且有一件事是一个很好的方法,有一个通用指令可以列出许多不同类型的类似对象(例如,消息,用户,评论等),通过根据对象的类型委托给特定的指令。

我们称这个指令为object-list,如果我们能够正常工作,它将有希望委托给许多不同的指令。

我们需要解决的主要问题是我们的系统中是否存在已提供此object-list指令的指令。我们检查这种方法的方法是针对目标指令发出$compile,将其链接到范围,并检查其HTML内容(例如var tmpElement = $compile('<div my-message'></div>')(scope);)。当template选项引用目标指令的模板时,这似乎有效,但当我们尝试指向templateUrl时,HTML内容为空。

这是一个Plunker,templateUrl方法到位(不工作)。您可以对其进行评论并取消注释template行以查看警报显示。

http://plnkr.co/edit/wD4ZspbGSo68v4eRViTp

还有另一种检查指令是否存在的方法?我承认,这确实有点像黑客。

1 个答案:

答案 0 :(得分:52)

您可以使用$injector.has检查提供商或实例是否存在。

app.directive('objectList', function ($compile, $injector) {
  return {
    template: 'OK',
    link: function (scope, element, attrs) {
      var exist = $injector.has('myMessageDirective');
      ...
    }
  };
});