Почему Angular не требуется тире в имени компонента
Я задавался вопросом, почему элементам Polymer нужна тире в имени пользовательских элементов, например <my-component>
, в то время как это не является необходимым для компонентов Angular, особенно поскольку компоненты Angular также используют ShadowDOM.
** Изменить **
По-видимому, в Angular не рекомендуется предлагать хорошую практику.
Ответы
Ответ 1
Спецификация HTML позволяет использовать неизвестные теги (<tab>
, <panel>
) без парсера HTML, бросающего подгонку. В свою пользу, Angular использует это поведение для своих директив, чтобы сделать компоненты такими же родными.
Теги, которые не имеют -
наследуют от HTMLUnknownElement
. Здесь есть хорошее объяснение процесса обновления: HTML5Rocks - Пользовательские элементы - Как обновить элементы
Поскольку директивы Angular были разработаны за раз до того, как существовала спецификация Custom Elements, они не используют -
. Это стандарт, который требует, чтобы имена элементов содержали -
.
Ответ 2
Черта не требуется Angular, так как нет необходимости в ней. Тем не менее, во всех крупных проектах я работал над префиксами всех компонентов и директив с двумя символами, а затем префиксами штриховки, например "ab-tab".
Во-первых, использование тире в именах делает ваш синтаксис совместимым со стандартом Custom Elements, хотя Angular не зависит от спецификации.
Во-вторых, это помогает организации. Стандартные директивы Angular имеют префикс "ng-". Используя собственный префикс, люди, читающие ваш код, смогут быстро различать компоненты из разных библиотек.