angularjs運算式-Expression

來源:互聯網
上載者:User

    緊接上節談到再談angularjs DI(Dependency Injection),在這裡介紹關於angularjs的運算式expression。expression指的是javascript的一小片段代碼,通常用於綁定binding)例如:{{ expression }}。在angularjs中是通過$parse service解析。

    $parse用法: $parse(expression);

  下面的運算式在angularjs將都是合法的運算式:

angularjs運算式vs. javascript運算式

    angularjs視圖運算式有點像javascript運算式,但是並不是利用javascript運算式eval()函數解析執行的,與javascript運算式區別如下:

   註: 對於angularjs運算式,可以採用$eval()方法解析執行。

 

Demo

html:

 

 
  1. <!doctype html> 
  2.  
  3. <html ng-app> 
  4.  
  5. <head> 
  6.  
  7. <script src="http://code.angularjs.org/angular-1.0.2.min.js"></script> 
  8.  
  9. <script src="script.js"></script> 
  10.  
  11. </head> 
  12.  
  13. <body> 
  14.  
  15. <div ng-controller="Cntl2" class="expressions"> 
  16.  
  17. Expression:  
  18.  
  19. <input type='text' ng-model="expr" size="80"/> 
  20.  
  21. <button ng-click="addExp(expr)">Evaluate</button> 
  22.  
  23. <ul> 
  24.  
  25. <li ng-repeat="expr in exprs"> 
  26.  
  27. [ <a href="" ng-click="removeExp($index)">X</a> ]  
  28.  
  29. <tt>{{expr}}</tt> =&gt; <span ng-bind="$parent.$eval(expr)"></span> 
  30.  
  31. </li> 
  32.  
  33. </ul> 
  34.  
  35. </div> 
  36.  
  37. </body> 
  38.  
  39. </html> 
  40.  

js:

 
  1. function Cntl2($scope) {  
  2.  
  3. var exprs = $scope.exprs = [];  
  4.  
  5. $scope.expr = '3*10|currency';  
  6.  
  7. $scope.addExp = function(expr) {  
  8.  
  9. exprs.push(expr);  
  10.  
  11. };  
  12.  

 

$scope.removeExp = function(index) {

exprs.splice(index, 1);

};

}

jsfiddle示範:http://jsfiddle.net/whitewolf/yduLt/1/

屬性執行

     angularjs所有的運算式執行都將依賴於一個作用於scope,不同於javascript的window全域範圍.如果你想引用全域作用於window,這必須依賴於上節的DI特性中引用$window service. 執行個體如下:

html:

 
  1. <!doctype html> 
  2.  
  3. <html ng-app> 
  4.  
  5. <head> 
  6.  
  7. <script src="http://code.angularjs.org/angular-1.0.2.min.js"></script> 
  8.  
  9. <script src="script.js"></script> 
  10.  
  11. </head> 
  12.  
  13. <body> 
  14.  
  15. <div class="example2" ng-controller="Cntl1"> 
  16.  
  17. Name: <input ng-model="name" type="text"/> 
  18.  
  19. <button ng-click="greet()">Greet</button> 
  20.  
  21. </div> 
  22.  
  23. </body> 
  24.  
  25. </html> 
  26.  

js:

 
  1. function Cntl1($window, $scope){  
  2.  
  3. $scope.name = 'World';  
  4.  
  5.    
  6.  
  7. $scope.greet = function() {  
  8.  
  9. ($window.mockWindow || $window).alert('Hello ' + $scope.name);  
  10.  
  11. }  
  12.  
  13. }  
  14.  

jsfiddle示範:http://jsfiddle.net/whitewolf/MF2Ku/1/

相容執行

    如上所述:angularjs運算式計算相容處理null和undefined不會拋出任何異常,因為這將現實處理在view顯示,而javascript則會拋出NullPointerExceptions異常。例如運算式

{{a.b.c}},與其同等效果的javascript代碼將是{{((a||{}).b||{}).c}}。 不控制流程

    在angularjs運算式中將不存在條件,迴圈,throw控制流程程語句。因為angularjs作為mvc或者貼近pm模式要求表現層邏輯必須包含在controller中,而不是view,view應該足夠的被動。在運算式模式中都儘力將表現層不變的表現邏輯和多樣易變的UI view中抽離出來,便於更好的自動化測試構建等。

過濾器Filters)

    資料僅作為一種持久化儲存領域模型表現層或者確切的成為視圖模型viewmodel),當展現給使用者的時候很多時候需要更友好的方式,比如時間,數字,貨幣格式本地化,

例如: name | uppercase , 123 | number:2,3*10|currency。

   filters支援鏈式寫法,如何powershell或者其他動作系統外殼語言一樣的管道式模型,形如 value | filter1 | filter2。

 

   其他資源可參考本部落格中其他angularjs隨筆或者angularjs官方文檔http://angularjs.org/。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.