式はJavaScriptのようなコードスニペットで、通常はバインドされた領域に配置されます({{expression}}など)。式は解析され、$ parse Service(http://code.angularjs.org/1.0.2/docs/api/ng.$ Parse)を通じて実行されます。
たとえば、以下はAngularの有効な式です。
1。角表現対JS式
これは、AngularがJavaScriptのeval()を介して式を評価しないため、角度ビューの式をJavaScriptの式として関連付けることが簡単ですが、これは完全に正しいものではありません。角度表現は、次の違いを持つJavaScript式と考えることができます。
一方、任意のJavaScriptコード(角度式で)を実行する場合、そのコードをコントローラーのメソッドの1つに記述して呼び出すことができます。 JavaScriptで角度式を評価する場合は、$ eval()メソッドを使用できます。
<!doctype html> <html lang = "zh-cn" ng-app = "expressiontest"> <head> <meta charset = "utf-8"> <title> expression-e1 </title-let> <style type = "text/css"> .ng-cloak {display:none:none; } </style> </head> <body ng-controller = "myctrl"> 1 + 2 = {{1 + 2}} <br/> expression:<入力タイプ= "text" ng-model = "expr"/> <button ng-click = "addexp(expr)"> exprute> <li ng-repeat = "> <ur> <li ng-repeat ="> <ur> <li ng-repeat = " ng-click = "remaidexp($ index)" href = ""> x </a>] <tt> {{expr}} </tt> => <span ng-bind = "$ parent。$ eval(expr)"> </span> </li> </ul> <src = "../ angular-1.js"> < type = "text/javascript"> var app = angular.module( "ExpressionTest"、[]); app.Controller( "myctrl"、function($ scope){var exprs = $ scope.exprs = []; $ scope.expr = "3*10 | currency"; $ scope.addexp = function(expr){exprs.push(expr);}; $ scope.removeexp = fenction(index(index); }); </script> </body> </html>2。プロパティ評価
角度表現解析環境のコンテキストは範囲ですが、JavaScriptはウィンドウ(厳密なモードエベルを参照する必要があります)であり、Angularは$ウィンドウを介してグローバルウィンドウオブジェクトにアクセスする必要があります。たとえば、式のウィンドウオブジェクトで定義されているarert()を呼び出す必要がある場合は、$ window.alert()を使用する必要があります。これは、グローバル状態(微妙なバグの共通のソース)への誤ってアクセスすることを避けることを目的としています。
<!doctype html> <html lang = "zh-cn" ng-app = "propertionevaluation"> <head> <meta charset = "utf-8"> <title> propertionvaluation </title> <style> <style type = "text/css"> ng-cloak {dibracs:none:none; } </style> </head> <body> <div ng-controller = "myctrl"> name:<input ng-model = "name" type = "text"/> <button ng-click = "greet()"> greet </button> </div> <スクリプトsrc = "../ angular-1.0.1.js type = "text/javascript"> var app = angular.module( "propertyvaluation"、[]); App.Controller( "myctrl"、function($ scope、$ window){$ scope.name = "kitty"; $ scope.greet = function(){$ window.alert( "hello" + $ scope.name);};}); </script> </body> </html> </html>3。寛容(寛容、断層許容度?)
表現評価は、未定義でヌルを寛容にしています。 JavaScriptでは、Aがオブジェクトではない場合、ABCを評価すると、例外がスローされます。これは一般的な言語では合理的であり、表現評価が主にデータバインディングに使用される場合があり、一般的な形式は次のとおりです。
{{abc}}
Aが存在しない場合、例外をスローするよりもディスプレイは合理的ではないようです(サーバーが応答するのを待っていない限り、これはしばらくして定義されます)。式が評価するときに十分に寛容でない場合は、拘束力のあるコードを非常に混乱させて書きます。
{((a || {})。b|| {})。c}} // this ...
同様に、関数abc()を参照する場合、未定義またはnullの場合、単に未定義を返します。
4.制御フローステートメントはありません
式にプロセス制御ステートメントを記述することはできません。この背後にある理由は、Angularのコアシステムは、アプリケーションの論理がビューではなくコントローラー(スコープ)にあるべきであるためです。条件付きブランチ、ループ、または例外をビュー式に追加する必要がある場合は、代わりにJavaScriptメソッドを委任できます(スコープでメソッドを呼び出すことができます)。
5。フィルター
ユーザーにデータを提示する場合、データを元の形式からフレンドリーな(非常に読みやすい)形式に変換する必要がある場合があります。たとえば、ユーザーに表示される前に、地域に基づいてフォーマットする必要があるデータオブジェクトがあります。次のような一連のフィルターに式を渡すことができます。
名前|大文字
この式評価者は、名前の値を大文字フィルターに単純に渡すことができます。
チェーンフィルターはこの構文を使用します:
値| filter1 | filter2
また、コロンで分割されたパラメーターをフィルターに転送することもできます。たとえば、2つの小数点に123を表示することもできます。
123 |番号:2
6。プレフィックス「$」
奇妙なことになるかもしれませんが、プレフィックス「$」の意味は何ですか? AngularがAPI名を他のAPIと区別するために使用する単純なプレフィックス(競合を防止)です。 Angularが$を使用しない場合、A.Length()の評価は未定義に戻ります。なぜなら、角度も角度もこのプロパティを定義していないからです。
Angularの将来のバージョンが長さを増やすことを選択する可能性があることを考慮すると、これによりこの式の動作が変わります。さらに悪いことに、開発者はAngularと競合する長さのプロパティを作成する可能性があることです。この問題は、Angularがメソッドを追加することにより現在既存のオブジェクトを拡張するためです。接頭辞「$」を追加することにより、Angularは特定の名前空間を保持するため、Angularを使用してAngular開発者と開発者は調和して生きることができます。