如果我在两个模块中注册两个具有相同名称的不同指令,那么最后的注册会赢吗?

时间:2015-07-29 13:40:19

标签: javascript angularjs

在AngularJS中,如果我在两个模块中注册两个具有相同名称的不同指令,那么最后的注册会赢吗? IIUC Angular模块不提供命名空间。

另外,Angular中的模块是否提供除了方便的注射器配置分组以外的任何其他内容?

换句话说 - 你能在运行时检测到某个模块(比如指令)来自哪个模块吗?

编辑:问题的第一部分:我认为它会。 https://docs.angularjs.org/guide/module

1 个答案:

答案 0 :(得分:4)

  

AngularJS,如果我注册两个具有相同名称的不同指令   在两个模块中,最后的注册会赢吗?

这将是一个“平局”。它们都已注册,并且都已执行。具有相同priority的指令的执行顺序与它们的定义顺序相同,link函数将以相反的顺序执行。

如果他们不符合某些条件,即

  
      
  • 请求隔离范围的多个指令。
  •   
  • 以相同名称发布控制器的多个指令。
  •   
  • 使用transclusion选项声明的多个指令。
  •   
  • 多个指令试图定义模板或模板URL。
  •   

...然后抛出respective error。请注意,文档在“隔离范围”上不准确,事实上它是“新范围”,同时禁止同时scope: truescope: { ... }。每个元素最多一个范围。

  

换句话说 - 你能在运行时检测出哪些模块   (说一个指令)来自?

不,不是没有攻击Angular。但是multidir错误会告诉您模块名称是否存在指令冲突。