Последствия пользовательских тегов HTML в директивах AngularJS

Скажем, я написал пользовательскую директиву gravatar в AngularJS, которая привязана к свойству email в области. Директива заменит этот HTML...

<gravatar email="user.email" />

общим тегом img, для атрибута src установлен правильный URL-адрес Gravatar:

<img src="http://gravatar.com/avatar/..." />

Мой вопрос может быть немного широким или даже наивным, но "как плохо" он изначально имеет тег <gravatar /> в моей странице HTML? Существуют ли какие-либо "реальные" последствия, кроме того, что они не проходят проверку W3C?

Ответ 1

W3C говорит

Авторы не должны использовать элементы, атрибуты или значения атрибутов для целей, отличных от их предполагаемой предполагаемой семантической цели, так как это предотвращает правильную обработку программного обеспечения страницы.

и

Авторы не должны использовать элементы, атрибуты или значения атрибутов, которые не разрешены этой спецификацией, или другие применимые спецификации, так как это делает значительно сложнее расширить язык в будущем.

http://www.w3.org/html/wg/drafts/html/master/dom.html#elements

Пользовательские элементы/атрибуты не имеют семантического значения и их следует избегать по этим причинам.

Вероятно, не будет никаких прямых последствий, которые вы даже заметите. В конце концов, Angular сам использует не подтверждающие атрибуты ng (хотя они также поддерживают префикс data-).

Единственная возможная проблема, с которой вы можете столкнуться, - это если элемент, который вы вводите, который в настоящее время является настраиваемым элементом, становится частью спецификации и имеет другое поведение, чем то, что вы ожидали раньше, но я думаю, что это маловероятно. Тем не менее, я мог бы избежать использования каких-либо обычаев, если бы мог.

В конце концов вы сможете зарегистрировать свои собственные элементы, но из того, что я могу сказать, браузер не поддерживает эту спецификацию.

Ответ 2

В то время как исходный источник тела страницы (до angular обрабатывает элемент ng-app) может не соответствовать стандартам W3C, если вы используете "replace: true" в директивах, пользовательские элементы заменяются шаблоном HTML, что может быть справедливым. Таким образом, в этом случае вы можете думать о angular как просто заполнителе, который заменяется выводом вывода терминала.