Ich habe ein kleines Problem mit einer eckigen Anweisung, die jetzt funktioniert und ich weiß nicht warum. Ich denke, es ist ein ziemlich einfaches Problem, das ich übersehe, vielleicht kannst du mir helfen.
Richtlinie ist wie folgt definiert:
%Vor%Dann index.cshtml:
%Vor%Anwendung.js:
%Vor%Und hier ist controllers.js
%Vor%Ok bestätigt, dass die Datei directives.js geladen ist, sonst wird application.js über 'unbekanntes Modul' getagt. Es gibt keine Fehlermeldungen in der Konsole, die Sache wird einfach nicht angezeigt. Irgendwelche Ideen?
BEARBEITEN
Wie gesagt, habe ich den Direktivennamen in camelCase geändert, aber immer noch kein Glück:
%Vor%Und
%Vor%Aber es zeigt sich noch nichts.
BEARBEITEN
Problem ist, dass angular erwartet, dass ein Objekt an das Attribut übergeben wird und kein String-Literal. Wenn Sie ein Objekt person = {name: 'John'} erstellen, übergeben Sie die Person und schreiben Sie {{person.name}} (vorausgesetzt, wir haben das Attribut person + scope var person ebenfalls benannt).
Bei der Normalisierung konvertiert Angular den Namen -
mit Trennzeichen in camelCase.
Verwenden Sie also camelCase, während Sie die Anweisung in JS angeben:
%Vor%Ich bin mir sicher, dass Sie das bereits herausgefunden haben, aber wenn Sie Ihre Scope-Definition ändern, damit der Name
lautet %Vor%Sie können dann eine Zeichenfolge übergeben. Das '@' interpoliert das Attribut, während '=' es bindet. Außerdem müssen Sie keinen Attributnamen angeben, wenn dieser der Bereichsvariablen entspricht.
Das Problem scheint in der Definition der Richtlinie zu liegen. Sie bemerken in Ihrer Frage, dass Angular ein Objekt erwartet; Dies gilt für den Bereich "=", nicht jedoch für den Bereich "@". Im Bereich "@" erwartet Angular nur eine Zeichenfolge. Ich habe unten einen Ausschnitt erstellt.
Zu viele Module
Wenn Sie die Direktive nicht in mehreren Anwendungen wiederverwenden, erstellen Sie kein neues Modul dafür. Fügen Sie die Direktive zu dem Modul hinzu, das Sie für die Anwendung erstellt haben. In meinem Beispiel unten habe ich das Modul mit "angular.module (moduleName)" zurückgerufen ... Wenn nur ein Argument verwendet wird, gibt Angular das vorhandene Objekt zurück, anstatt ein neues zu erstellen. So können wir den Code in viele Dateien aufteilen.
Zu beachtende Dinge
Sie werden folgendes bemerken:
Verwenden von Injection
Wenn Sie für jede Direktive oder jeden Controller ein anderes Modul haben, muss jedes in die Moduldefinition der Anwendung eingefügt werden. Dies lässt viel Platz für Fehler. Als optimale Methode sollten Sie bei Bedarf nur ein neues Modul erstellen und das Modul zu einem Container für eine Gruppe verwandter Funktionen und nicht für ein einzelnes Element machen.
Der folgende Code zeigt die korrekte Injektion.
Halte es einfach. Definieren Sie Ihre Anweisungen auf einem einzigen Modul für Ihre Anwendung. Sobald Sie dies getan haben und arbeiten, wenn Sie die Anweisungen in einer anderen Anwendung erneut benötigen, refaktorisieren und experimentieren Sie mit Injektionen zu dieser Zeit, nachdem Sie etwas mehr Angular Praxis unter Ihrem Gürtel haben.
Du hast eine glänzende Zukunft mit Angular, mach weiter so!
Ihre Anweisung muss mit Kamelen versehen sein
%Vor% Dann sind Sie in Ihrem HTML frei, ob Sie es my-directive
oder myDirective
Beide sind gültig
%Vor%Tags und Links angularjs angularjs-directive angularjs-scope