Das ist eine seltsame Frage, aber hier ist die Idee:
Nehmen wir an, ich habe ein komplexes JSON-Objekt, das von einem HTTP-Aufruf zurückkommt und an das $scope
anfügt. Etwas wie das:
Wenn ich nun einen Überblick über die Kaufhistorie in einem AngularJS-Partial anzeigen wollte, könnte ich so etwas machen:
%Vor% Die wirklich praktische Sache an diesem Format (obwohl es hier nicht so offensichtlich ist mit so wenigen Requisiten) ist, dass der beschriebene Einkauf als p
aliasiert ist. Ich muss nicht obj.purchase_hist[0].item_id
machen, ich kann nur p.item_id
machen.
Aber was ist, wenn ich die Hausadresse des Benutzers zeige? Muss ich das wirklich tun?:
%Vor% Das ist wirklich ausführlich. Ich würde viel lieber etwas verwenden, das der Syntax controller as ...
ähnlich ist, etwa so:
Gibt es in AngularJS so etwas? Leider bin ich nicht in der Lage Plugins in meiner Umgebung zu verwenden, also suche ich speziell nach einem Teil des eckigen Kerns, der auf diese Weise funktioniert.
Danke!
Ich habe diese kleine Direktive geschrieben, mit der Sie ausführen können, was Sie wollen:
Richtlinie ngAlias
%Vor%Setzen Sie beispielsweise Ihr Objekt in Ihrem Controller
Controller
%Vor%Und Sie können es verwenden:
HTML
%Vor%@PaulBoutes lieferte die Antwort, die ich brauchte, und er sollte den Kredit bekommen; Ich wollte nur die Version der Richtlinie hinzufügen, auf die ich mich aufgrund seiner Antwort festgelegt habe.
%Vor%Die gleiche Grundidee wie die von Paul, nur etwas aufgeräumt und etwas flexibler in Bezug auf Leerzeichen und so gemacht.
Anwendungsbeispiel:
%Vor%Sicherlich gibt es keinen Mangel an praktikablen Lösungen hier, aber es sollte nicht schaden, einen anderen hinzuzufügen.
Ich habe das neulich zusammengeworfen, um mir ein wenig Tipparbeit zu ersparen und meinen HTML-Code leserlicher zu machen. Es erstellt einen neuen untergeordneten Gültigkeitsbereich, sodass der vorhandene Gültigkeitsbereich nicht mit diesen Aliasen verschmutzt wird. Es funktioniert einfach, indem Sie die Eigenschaft des übergeordneten Bereichs an den neuen untergeordneten Bereich mit dem von Ihnen angegebenen Namen binden.
%Vor%Also, anstatt das zu tun:
%Vor%Mach das:
%Vor% Oder machen Sie es ohne as
:
Soweit ich weiß, gibt es nichts wirklich einfaches. Es gibt einige Hacks. Sie können Objekt mithilfe eines neuen Controllers dem neuen Bereich zuordnen
%Vor% wo Strg% makeAlias
-Argument nur als home
Eine andere Lösung ist die Verwendung von $scope.$watch
und das Zuordnen eines Objekts zu dem bequemeren.
Ich denke nicht, dass Angular Out-of-Box-Unterstützung für solche Dinge bietet. Aber Sie können definitiv Domain-Objekt erstellen. Konvertieren Sie Ihre HTTP-Antwort in Domain-Objekt. Innerhalb Ihres Domain-Objekts können Sie eine Hilfsmethode verwenden, um die erforderlichen Informationen zu erhalten. In Ihrem Fall können Sie beispielsweise ein Domain-Objekt wie dieses haben
%Vor%Sie können dieses Domain-Objekt in Ihrem Controller verwenden
%Vor%in HTML können Sie
verwenden %Vor%Sie können Ihre Domain neu definieren, um die Sache zu vereinfachen. Es könnte zusätzliche Arbeit sein. Aber wenn du immer und immer wieder dasselbe machen musst. Es kann Spaß machen, Code auf diese Weise zu schreiben
Ich bin gerade auf dieses Problem gestoßen und habe die ngAlias-Direktive ausprobiert, die gut oder schlecht funktioniert, ich weiß es nicht, weil ich Probleme hatte, wahrscheinlich aufgrund eines anderen nicht zusammenhängenden Fehlers, und ich entschied mich dafür Methode:
%Vor%Tada! "obj.user.contact.home" hat jetzt einen Alias für "uhome". Ich glaube, dass diese Lösung genau das ist, was Sie wollten, als Sie diese Frage gestellt haben, denn sie verwendet buchstäblich ng-repeat und hat daher alle Vorteile des eingebauten Alias-Mechanismus von ng-repeat.
Tags und Links javascript angularjs alias