緊接上節談到再談angularjs DI(Dependency Injection),在這裡介紹關於angularjs的運算式expression。expression指的 是javascript的一小片段代碼,通常用於綁定(binding)例如:{{ expression }}。在angularjs中是通過$parse service解析 。
$parse用法: $parse(expression);
參數:javascript程式碼片段。
傳回值:{function(context, locals)} ,運算式編譯結果:
context:嵌入運算式執行的作用於scope。
locals:本地變數,常用於替換重寫context。
傳回值 同樣帶有assign屬性,允許為運算式賦值。
下面的運算式在angularjs將都是合法的運算式:
1+2
3*10 | currency
user.name
angularjs運算式vs. javascript運算式
angularjs視圖運算式有點像javascript運算式, 但是並不是利用javascript運算式eval()函數解析執行的,與javascript運算式區別如下:
所有屬性都依賴於scope作用 於。並不是javascript的全域作用於window。
運算式計算相容處理null和undefined,而javascript則會拋出 NullPointerExceptions異常。
沒有控制流程程語句,條件,迴圈throw。
過濾器,多餘angularjs運算式計算結果可以通過 過濾器轉化格式,|運算式,如時間,貨幣,數字格式等。
註: 對於angularjs運算式,可以採用$eval()方法解析執行 。
Demo
html:
<!doctype html> <html ng-app> <head> <script src="http://code.angularjs.org/angular-1.0.2.min.js"></script> <script src="script.js"></script> </head> <body> <center ng-controller="Cntl2" class="expressions"> Expression: <input type='text' ng-model="expr" size="80"/> <button ng-click="addExp(expr)">Evaluate</button> <ul> <li ng-repeat="expr in exprs"> [ <a href="" ng-click="removeExp($index)">X</a> ] <tt>{{expr}}</tt> => <span ng-bind="$parent.$eval(expr)"></span> </li> </ul> </center> </body> </html>