2013-08-01 2 views
71

Мой код:Угловое название директивы: допускаются только строчные буквы?

app.directive('abcabc', function(){ alert('directive');}); // working 

но

app.directive('abcAbc', function(){ alert('directive');}); // not working ! 
app.directive('abc-abc', function(){ alert('directive');}); // not working ! 

ли я делаю неправильно? Или существуют специальные правила именования для Угловой директивы?

ответ

116

AngularJS пытается сделать всех счастливыми!

Некоторые люди предпочитают использовать атрибуты данных, такие как data-abc-abc, я предполагаю, что валидаторы счастливы. Другие люди предпочитают использовать пространства имен, такие как abc:abc, а другие предпочитают использовать фактическое название директивы abcAbc. Или даже все колпачки ABC_ABC. Или атрибуты расширения, такие как x-abc-abc.

AngularJS нормализует имя, используемое в HTML, чтобы попытаться охватить все эти случаи. data- и x-, остальная часть с :, - и _ в качестве границ слов. Это делает abcAbc из упомянутых выше случаев, который используется для поиска директивы, объявленной в JavaScript.

Это все называется нормализацией атрибутов (US: нормализация атрибута) и может быть найдено в AngularJS documentation и source code.

+6

Благодарим вас за это! Я прочитал документацию как «вы можете сделать это в любом случае», но это явно не так. Я удивлен, что на данный момент у нас есть 10 upvotes. – spikeheap

+0

Он также встроен с веб-компонентами namespacing: http://webcomponents.github.io/articles/web-components-best-practices/ –

+1

Я изменил последний абзац, чтобы использовать английскую форму слова «нормализация» вместо английского «нормализация», поскольку Угловые документы используют английскую орфографию и поиск их для британской орфографии не возвращает никаких результатов. –

23

Вы должны использовать имена разделяемых штрих-кода внутри html и camelCase для соответствующего имени в директиве.

Как вы можете прочитать на документ: Угловая использует имя-с-тире для имен атрибутов и верблюжьего для соответствующего имени директивы)

Здесь: http://docs.angularjs.org/tutorial/step_00

+6

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

0

Ну, название директивы должен будь то в нижнем регистре, по крайней мере, в версии AngularJS 1.4.9, в противном случае я получаю инъекцию $ не может быть найдена ошибка

Смежные вопросы