在AngularJS中,如果我在两个模块中注册两个具有相同名称的不同指令,最后一个注册会获胜吗?IIUC Angular模块不提供命名空间。
还有,Angular中的模块除了提供了一个方便的注入器配置分组之外,还能提供其他功能吗?
换句话说-你能在运行时检测到哪个模块的东西(说一个指令)来自?
这是这个问题的第一部分:我认为它会。https://docs.angularjs.org/guide/moduleAngularJS,如果我用相同的名字注册两个不同的指令在两个模块中,最后注册的人会赢吗?
这将是一个"平局"。它们都是注册的,都是执行的。具有相同priority
的指令的执行顺序与其定义的顺序相同,并且link
函数将以相反的顺序执行。
如果它们不满足某些条件,即
- 多个指令请求隔离作用域。
- 多个指令以相同的名称发布一个控制器。
- 用transclusion选项声明多个指令。
- 多个指令试图定义一个模板或templateURL.
…然后抛出相应的错误。注意文件中"隔离作用域"是不准确的,实际上是"新作用域",同时禁止scope: true
和scope: { ... }
。每个元素一个作用域。
换句话说,你能在运行时检测到哪个模块(比如指令)来自哪里?
不行,除非你破解了Angular。但是如果有指令冲突,multidir
错误会告诉你模块的名字。