Ausdrücke sind javaScript-ähnliche Code-Snippets, die normalerweise im gebundenen Bereich platziert sind (z. B. {{Ausdruck}}). Ausdrücke werden über den $ Parse -Dienst analysiert und ausgeführt (http://code.angularjs.org/1.0.2/docs/api/ng.$parse).
Beispielsweise sind die folgenden gültigen Ausdrücke in Angular:
1. Expression des Winkelausdrucks gegen JS
Dies ist für Menschen leicht, um einen Expression von Winkelansichten als JavaScript -Expression zu verbinden, aber dies ist nicht ganz richtig, da Angular einen Ausdruck nicht durch JavaScripts Eval () bewertet. Sie können sich einen Winkelausdruck als einen JavaScript -Ausdruck mit den folgenden Unterschieden vorstellen:
Wenn wir dagegen einen beliebigen JavaScript -Code (in einem Winkelausdruck) ausführen möchten, können wir diesen Code in eine der Methoden des Controllers schreiben und ihn aufrufen. Wenn wir einen Winkelexpression in JavaScript bewerten möchten, können wir die Methode $ eval () verwenden.
<! DocType html> <html lang = "zh-cn" ng-App = "expressiontest"> <kopf> <meta charset = "utf-8"> <title> expression-e1 </title> <style type = "text/csS"> .ng-cloak {display: none; · ng-klick = "removeexp ($ index)" href = ""> x </a>] <tt> {{{expr}} </tt> => <span ng-bind = "$ parent. type = "text/javaScript"> var app = angular.module ("expressiontest", []); app.Controller ("myctrl", function ($ scope) {var exprs = $ scope.exprs = []; $ scope.expr = "3*10 | currency"; }); </script> </body> </html>2. Bewertung der Eigenschaft
Der Kontext der Analyseumgebung des Winkelausdrucks ist Umgebung, während JavaScript ein Fenster ist (es sollte sich auf den strengen Modus -Evel beziehen) und Angular muss über $ Fenster auf das globale Fensterobjekt zugreifen. Wenn wir beispielsweise Alerert () aufrufen müssen, das in einem Ausdruck in einem Fensterobjekt definiert ist, müssen wir $ fenster.alert () verwenden. Dies soll vermeiden, versehentlich auf den globalen Staat zuzugreifen (eine gemeinsame Quelle subtiler Fehler).
<! DocType html> <html Lang = "zh-cn" ng-App = "PropertyeValuation"> <head> <meta charset = "utf-8"> <title> PropertyValuation </title> <style type = "text/css"> .ng-cloak {display: none; " type = "text/javaScript"> var app = angular.module ("PropertyValuation", []); app.Controller ("myctrl", function ($ scope, $ window) {$ scope.name = "kitty";3. Vergeben (Toleranz, Verwerfungstoleranz?)
Die Expressionsbewertung ist undefined und null vergeben. In JavaScript, wenn a kein Objekt ist, wird ABC bewertet, eine Ausnahme wird ausgelöst. Manchmal ist dies für gemeinsame Sprachen vernünftig, und die Expressionsbewertung wird hauptsächlich für die Datenbindung verwendet, und die allgemeine Form ist wie folgt:
{{ABC}}
Wenn es nicht vorhanden ist, scheint keine Anzeige vernünftiger zu sein als eine Ausnahme (es sei denn, wir warten darauf, dass der Server antwortet, was in kurzer Zeit definiert wird). Wenn der Ausdruck bei der Bewertung nicht tolerant genug ist, schreiben wir den Bindungscode so verwirrend:
{{((a || {}). B || {}). C}} // this ...
Wenn Sie sich auf eine Funktion ABC () beziehen, gibt es einfach undefiniert, wenn sie undefiniert oder Null ist, einfach zurückgegeben.
4. Keine Kontrollflussanweisungen
Wir können keine Prozesssteuerungsanweisungen in Ausdrücken schreiben. Der Grund dafür ist, dass das Kernsystem von Angular darin besteht, dass sich die Logik der Anwendung im Controller (Umfang) und nicht in der Ansicht befinden sollte. Wenn wir bedingte Zweige, Schleifen oder Ausnahmen in den Ausdruck der Ansicht hinzufügen müssen, können wir stattdessen die JavaScript -Methode delegieren (Sie können die Methode im Bereich aufrufen).
5. Filter
Wenn wir den Benutzern Daten präsentieren, müssen wir die Daten möglicherweise aus dem ursprünglichen Format in ein freundliches (gut lesbares) Format konvertieren. Zum Beispiel haben wir ein Datenobjekt, das basierend auf der Region formatiert werden muss, bevor wir dem Benutzer angezeigt werden. Wir können Ausdrücke an eine Reihe von Filtern übergeben, wie z. B.:
Name | Großbuchstaben
Dieser Ausdrucksbewerter kann einfach den Wert des Namens in den Großbuchstaben übergeben.
Kettenfilter verwenden diese Syntax:
Wert | filter1 | filter2
Wir können auch Parameter übertragen, die durch Kolons in Filter unterteilt sind, z. B. 123 an zwei Dezimalstellen anzeigen:
123 | Nummer: 2
6. Präfix "$"
Wir werden es vielleicht seltsam finden, was bedeutet das Präfix "$"? Es handelt sich um ein einfaches Präfix (Verhinderung von Konflikten), die von Angular verwendet werden, um seinen API -Namen von anderen APIs zu unterscheiden. Wenn Angular nicht $ verwendet, wird die Bewertung von A.Length () undefiniert zurückgegeben. Weil weder ein noch Angular diese Eigenschaft definiert.
Angesichts der Tatsache, dass zukünftige Versionen von Angular die Länge erhöhen können, wird dies das Verhalten dieses Ausdrucks verändern. Schlimmer ist, dass wir Entwickler möglicherweise eine Länge Eigenschaft schaffen, die dann mit Angular in Konflikt steht. Dieses Problem existiert, weil Angular das aktuell vorhandene Objekt durch Hinzufügen von Methoden erweitert. Durch Hinzufügen des Präfix "$" behält Angular einen bestimmten Namespace bei, sodass Angularentwickler und Entwickler, die Angular verwenden, in Harmonie leben.