在AngularJS中,如果我在两个模块中注册两个具有相同名称的不同指令,那么最后的注册会赢吗? IIUC Angular模块不提供命名空间。
另外,Angular中的模块是否提供除了方便的注射器配置分组以外的任何其他内容?
换句话说 - 你能在运行时检测到某个模块(比如指令)来自哪个模块吗?
编辑:问题的第一部分:我认为它会。 https://docs.angularjs.org/guide/module
答案 0 :(得分:4)
AngularJS,如果我注册两个具有相同名称的不同指令 在两个模块中,最后的注册会赢吗?
这将是一个“平局”。它们都已注册,并且都已执行。具有相同priority
的指令的执行顺序与它们的定义顺序相同,link
函数将以相反的顺序执行。
如果他们不符合某些条件,即
- 请求隔离范围的多个指令。
- 以相同名称发布控制器的多个指令。
- 使用transclusion选项声明的多个指令。
- 多个指令试图定义模板或模板URL。
...然后抛出respective error。请注意,文档在“隔离范围”上不准确,事实上它是“新范围”,同时禁止同时scope: true
和scope: { ... }
。每个元素最多一个范围。
换句话说 - 你能在运行时检测出哪些模块 (说一个指令)来自?
不,不是没有攻击Angular。但是multidir
错误会告诉您模块名称是否存在指令冲突。