2013-10-28 39 views
11

AngularJS指令的前綴爲ng-。爲什麼它堅持使用前綴而不是使用實際的xml命名空間?爲什麼AngularJS不推薦使用XML名稱空間?

AngularJS's documentation

如果您選擇使用老式指令語法NG:那麼在HTML中包括讓IE快樂XML命名空間。 (這是這裏的歷史原因,我們不再推薦使用毫微克:.)

使用這樣的事情似乎工作:

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

this jsFiddle是顯而易見的。

但它不建議使用它,並支持它只是因爲歷史原因。有人能指出我的理由是什麼嗎?從Flex背景來看,我認爲XML命名空間非常好,我很樂意使用它們,但是Angular可能有強烈的理由使用前綴方法?

+0

這對使用AngularJS和SVG很好奇,因爲SVG使用XML解析器。例如,data-*和ng- *在SVG中不合法(某些瀏覽器可能允許)。但是,ng:*在SVG中是合法的。 http://stackoverflow.com/questions/15532371/do-svg-docs-support-custom-data-attributes –

回答

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組中也有關於此主題的somediscussion

+0

從屬性命名的靈活性來看,我的猜測是Angular不能以可識別名稱空間的方式進行解析,而是將文本轉換應用於完全限定的屬性名稱,剝離「:」等分隔符並應用camelCasing。他們可能建議不要使用ng:因爲它可能會導致您相信在XML定義它們時可以使用名稱空間。 –

4

風險聽起來glib,因爲角是集中在擴展html功能,而不是xml?

+1

嗯,這是有道理的。 HTML5也不是XML的純粹超集。 – Himanshu

相關問題