我自己也想过这个问题。考虑两个独立的项目,“Widget Factory”和“Wombat Framework”,每个都开发指令x
。首选做法是为指令名称添加前缀以避免命名空间冲突,但在这种情况下,每个指令最终可能仍会定义一个wf-x
.
如果我<div wf-x="something"></div>
在包含两个模块的应用程序中使用会发生什么?有趣的是,angular 会同时连接两者,并按优先级降序连接每一个。但这产生正确结果的几率很低。如果两个指令都尝试添加控制器,Angular 将引发错误,并且这两个指令的语义以及它们对属性值和元素结构的期望很容易相互冲突。
在 XML 中,这个问题通过命名空间得以解决。 <div xmlns:wf1="..." wf1:x="something"></div>
或者<wf1:x xmlns:wf1="..."></wf1:x>
不漂亮,但它们清楚地描述了我们打算使用的指令。
为什么角度不支持这个?XML 命名空间并不常见,在一般 HTML 中可能得不到很好的支持,并且解析可能存在技术挑战。指令在注释和 CSS 类以及元素和属性中受到支持,并且:
必须以某种方式在类名中被破坏。不过,最简单的答案可能是,它还不是一个足够普遍的问题,需要比我们今天使用的前缀更高级的东西。需要注意的是,Angular 当前的方法是Web Components推荐的方法。随着该标准的发展,我希望 Angular 能够跟踪它。Polymer 组中也有一些 关于这个主题的讨论。