Name der Winkelrichtlinie: Nur Kleinbuchstaben erlaubt?


76

Mein Code:

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

aber

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

Mache ich falsch Oder gibt es spezielle Namensregeln für die Angular-Direktive?

Antworten:


118

AngularJS versucht alle glücklich zu machen!

Einige Leute bevorzugen die Verwendung von Datenattributen, wie data-abc-abcich annehme, um Validatoren bei Laune zu halten. Andere bevorzugen die Verwendung von Namespaces wie abc:abcund andere bevorzugen die Verwendung des tatsächlichen Direktivennamens abcAbc. Oder sogar alle Kappen ABC_ABC. Oder Erweiterungsattribute wie x-abc-abc.

AngularJS normalisiert den in HTML verwendeten Namen, um zu versuchen, alle diese Fälle abzudecken. data-und x-werden entfernt, um den Rest camelcased mit :, -und _als Wortgrenzen. Dies abcAbcergibt sich aus den oben genannten Fällen, mit denen die in JavaScript deklarierte Direktive nachgeschlagen wird.

Dies alles wird als Attributnormalisierung (US: Attributnormalisierung) bezeichnet und ist in der AngularJS-Dokumentation und im Quellcode enthalten .


6
Danke dafür! Ich habe die Dokumentation als "Sie können es so oder so machen" gelesen, aber das ist eindeutig nicht der Fall. Ich bin überrascht, dass dies bisher nur 10 positive Stimmen hat.
Spikeheap

Es ist auch im Einklang
Rui Nunes

2
Ich habe den letzten Absatz geändert, um die US-englische Form des Wortes "Normalisierung" anstelle der britischen "Normalisierung" zu verwenden, da die Angular-Dokumente die englische Schreibweise verwenden und die Suche nach der britischen Schreibweise keine Ergebnisse liefert.
Samuel Neff

1
Die schlimmste Überraschung kommt, wenn Sie erkennen, dass Sie den Namen der Direktive mit kleinen, nicht großgeschriebenen Buchstaben beginnen sollten.
Sazary

1
@sazary Warum ist das eine Überraschung? Das Gehäuse stimmt mit allen anderen Javascript-Kennungen in Angular überein.
MEMark

25

Sie sollten in HTML und camelCase durch Bindestriche getrennte Namen für den entsprechenden Namen in der Direktive verwenden.

Wie Sie im Dokument lesen können: Angular verwendet Name-mit-Bindestrichen für Attributnamen und camelCase für den entsprechenden Direktivenamen.

Hier: http://docs.angularjs.org/tutorial/step_00


6
Dies kann der empfohlene Weg sein. aber ich hasse das, da die Suche nach der entsprechenden Direktive in allen Dateien mühsamer wird. speziell für Richtlinien mit vielen Wörtern.
ColacX

0

Nun, der Direktivenname muss nur in Kleinbuchstaben geschrieben sein, zumindest in AngularJS Version 1.4.9, sonst bekomme ich einen Fehler bei $ inj nicht gefunden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.