Почему AngularJS не рекомендует использовать пространства имен XML?

Директивы AngularJS имеют префикс ng-. Почему он настаивает на использовании префикса вместо использования фактического пространства имен xml?

Из Документация AngularJS:

Если вы решите использовать синтаксис директивы старого стиля ng: тогда включите xml-namespace в html, чтобы сделать IE счастливым. (Это здесь по историческим причинам, и мы больше не рекомендуем использовать ng:.)

Используя что-то вроде этого, похоже, работает:

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

как видно из этого jsFiddle.

Но он не рекомендует использовать его и поддерживает его только по историческим причинам. Может ли кто-нибудь указать мне, каковы эти причины? Исходя из фона Flex, я думаю, что пространства имен XML великолепны, и я бы с удовольствием их использовал, но, возможно, есть серьезные причины для Angular идти с префиксным подходом?

Ответ 1

Я сам об этом задумался. Рассмотрим два независимых проекта: "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> не очень хороши, но они четко описывают, какую директиву мы намерены использовать.

Почему это не поддерживает angular? Пространства имен XML являются необычными и могут не поддерживаться в общем HTML, и могут возникнуть технические проблемы с синтаксическим разбором. Директивы поддерживаются в комментариях и CSS-классах, а также в элементах и ​​атрибутах, а : нужно каким-то образом исказить в имени класса. Самый простой ответ, хотя может заключаться в том, что это еще не достаточно распространенная проблема, требующая чего-то более продвинутого, чем префиксы, которые мы видим сегодня. Следует отметить, что текущий подход angular является рекомендованным веб-компонентами. По мере развития этого стандарта я ожидал бы angular отслеживать его. Там несколько discussion на эту тему в группе Polymer также.

Ответ 2

С угрозой звучания glib, потому что angular сосредоточен на расширении html-функции, а не на xml?