为什么AngularJS不建议使用XML命名空间?

时间:2013-10-28 09:16:54

标签: javascript xml angularjs xml-namespaces

AngularJS指令以ng-为前缀。为什么它坚持使用前缀而不是使用实际的xml命名空间?

来自AngularJS's documentation

如果您选择使用旧样式指令语法ng:那么在html中包含xml-namespace以使IE感到高兴。 (这是出于历史原因,我们不再推荐使用ng:。)

使用这样的东西似乎有效:

<html xmlns:ng="http://angularjs.org" ng:app="my-app">

this jsFiddle可以看出。

但它不建议使用它并仅仅因为历史原因支持 。有人能指出我的原因是什么吗?来自Flex背景,我认为XML命名空间很棒,我很乐意使用它们,但也许Angular有充分理由采用前缀方法?

2 个答案:

答案 0 :(得分:4)

有听到glib的风险,因为angular专注于扩展html功能,而不是xml?

答案 1 :(得分:4)

我自己也在想这件事。考虑两个独立的项目,“Widget Factory”和“Wombat Framework”,每个项目都开发指令x。它是preferred practice前缀指令名称以避免命名空间冲突,但在这种情况下,每个人可能仍然最终定义wf-x

如果我在包含两个模块的应用程序中使用<div wf-x="something"></div>会发生什么?有趣的是,角度将附加两者,以降序优先顺序链接每个。但产生正确结果的可能性很低。如果两个指令都试图添加控制器,Angular将引发错误,并且这两个指令的语义以及它们对元素的属性和结构的值的期望可能很容易相互冲突。

在XML中,使用命名空间解决了这个问题。 <div xmlns:wf1="..." wf1:x="something"></div><wf1:x xmlns:wf1="..."></wf1:x>并不漂亮,但它们清楚地描述了我们打算使用的指令。

为什么角度不支持这个? XML命名空间不常见,在一般HTML中可能不受支持,解析可能存在技术挑战。注释和CSS类以及元素和属性都支持指令,:必须在类名中以某种方式被修改。最简单的答案可能是,要求比我们今天使用的前缀更先进的东西还不是一个常见的问题。应该注意的是,角度的当前方法是Web Components推荐的方法。随着标准的发展,我希望有角度跟踪它。在Polymer组中,此主题也有some discussion