Назва кутової директиви: дозволяються лише малі літери?


76

Мій код:

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

але

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

Я роблю не так? Або існують спеціальні правила іменування для директиви Angular?

Відповіді:


118

AngularJS намагається зробити всіх щасливими!

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

AngularJS нормалізує ім'я, яке використовується в HTML, щоб спробувати охопити всі ці випадки. data-і x-роздягнуті, решта закаркавані :, -і _як межі слів. Це випливає abcAbcіз вищезазначених випадків, який використовується для пошуку директиви, оголошеної в JavaScript.

Це все називається нормалізацією атрибутів (США: нормалізація атрибутів), і це можна знайти в документації та вихідному коді AngularJS .


6
Дякую за це! Я прочитав документацію як "ви можете зробити це в будь-якому випадку", але це явно не так. Я здивований, що на даний момент у мене лише 10 голосів.
spikeheap

Він також відповідає простору імен веб-компонентів: webcomponents.github.io/articles/web-components-best-practices
Rui Nunes,

2
Я змінив останній абзац, використовуючи американську англійську форму слова "нормалізація" замість британської "нормалізація", оскільки документи Angular використовують англійську орфографію, а пошук за британським правописом не дає результатів.
Самуель Нефф,

1
найгірший сюрприз виникає, коли ви усвідомлюєте, що слід розпочинати назву директиви з малих, не великих літер
сазарій

1
@sazary Чому це сюрприз? Його корпус узгоджується з усіма іншими ідентифікаторами JavaScript у Angular.
ПАМ’ЯТКА

25

Ви повинні використовувати імена, розділені тиреми, всередині html та camelCase для відповідного імені в директиві.

Як ви можете прочитати в документі: Angular використовує імена з тире для імен атрибутів і camelCase для відповідного імені директиви)

Тут: http://docs.angularjs.org/tutorial/step_00


6
це може бути рекомендованим способом. але я ненавиджу це, оскільки пошук відповідної директиви у всіх файлах стає більш втомливим. особливо для директив з багатьма словами.
ColacX

0

Ну, ім'я директиви повинно бути з малої літери, принаймні в AngularJS версії 1.4.9, інакше я отримую помилку $ inject неможливо знайти

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.