學習 AngularJS (二)

繼續學習(瞭解)AngularJS. php

看例子, 分明是一種模板語法: css

<body ng-controller='PhoneListCtrl'>
  <ul>
    <li ng-repeat='phone in phones'>
      {{phone.name}} <p> {{phone.snippet}}</p>
    </li>
  </ul>
</body>

{{...}} 裏面是 angular expression, 就是簡單表達式, 估計支持一些模式, 不支持一些模式. html

ng-repeat 至關於 foreach 循環. 估計是 directive, 估計還能夠定製(本身寫一個新的). 前端

function PhoneListCtrl($scope) {
  $scope.phones = [
    {name:'蘋果', snippet:'土豪金' },
    {name:'安卓', snippet:'...'},
    ...
  ];
}

看起來控制器的形式是一個函數, 此簡單例子中提供 view 一個數據 phones, 即 M-V 之間的數據綁定. git

<input ng-model="query">
<li ng-repeat="phone in phones | filter:query"> 這裏用 $filter 函數來處理 ngRepeat 指令的輸入. angularjs

測試語義例子: github

... it('應該xxx', function() {
       input('query').enter('蘋果');   --- 在輸入框 query 中輸入 '蘋果'
       expect( repeater('.phones li').count == 1 );   --- 指望(斷言)重複器 phones 項目數爲 1.
   }); web

以上主要是界面 MVC 模式例子, 測試. ajax

菜鳥學習 AngularJS 教程網頁:
   http://www.runoob.com/angularjs/angularjs-tutorial.html express

模塊定義:
    var app = angular.module('myApp', ...);
控制器:
   app.controller('myCtrl', function($scope) { ... } );

AngularJS 指令: 擴展的 HTML 屬性, 帶有前綴 ng-. 如 ng-app, ng-init, ng-model 等.
   重複 ng-repeat, 控制器 ng-controller, 控制器是 js 對象, 用 js構造函數建立.

過濾器: 使用管道字符 | 添加到表達式, 指令中, 可用於轉換數據.
   如 currency 過濾器格式化數字爲貨幣格式. filter 選擇子集; orderBy 排序等.
   可多個過濾器組合. 
   (本質上可看作: 對象至關於 input, 經 filter 產生 output, 多個過濾器組合可看作是一種鏈式調用.
     過濾器參數看作是調用的參數).

顯示錶格: 相似於重複 li, 在 tr 上添加 ng-repeat, 在 td 中添加 {{ }} 表達式. 

ng-click 指令: <button ng-click='count = count+1'> 看起來像寫了一個內嵌的 js 腳本, 或 lambda 表達式.

輸入驗證: 使用 ng-show 設置校驗提醒 span 在校驗出錯狀況下可見, 如 username.$dirty && $invalid.

指令 ng-include 包含 HTML 內容. 如 <div ng-include='my-list.html'></div>

AngularJS 在 DOM onload() 事件中自動開始, 查找 ng-app 指令, 加載模塊, 編譯.
若是 ng-app 指定的頁面一小部分, 則會更快編譯和執行.

剩下的參考教程的手冊: http://www.runoob.com/angularjs/angularjs-reference.html

 

=== 下面應主要關心一下 angular 提供的有用的服務 =====

$http 用於讀取 web 服務器上的數據. 如 $http.get(url);

跨域訪問解決方案參考: PHP Ajax 跨域問題最佳解決方案
   (經過設置 Access-Contorl-Allow-Origin 來實現跨域)

AngularJS 的首選樣式表是 Twitter Bootstrap, 其是當前最受歡迎的前端框架. (引用 bootstrap.min.css)

Service 都是單例的, 在一個應用中只會實例化一次(用 $injector 服務), 主要負責提供一個接口把特定函數
須要的方法放在一塊兒.

咱們能夠輕鬆地建立本身的service, 僅僅註冊 service 便可. 最多見的常見方法:

angular.module('myapp.service', [])
  .factory('foobar_service', function() {
    var service_instance = {
      // ... 
    };
    return service_instance;
  });

建立一個 service 就是簡單的返回一個函數, 這個函數返回一個對象, 在應用建立的時候(函數被調用)從而
建立出單實例的服務對象.

服務傳遞給 controller 的方式, 把 service 的名字做爲參數傳遞:

app.controller('my_controller', ['$scope', 'my_service', 
  function() {$scope, my_service) {
    ...
  }]
);

(看起來像寫出此 controller 依賴的模塊/服務, 而後 angular 找到這些模塊/服務, 而後注入 controller)
這是依賴注入的寫法... 另外一個例子使用 $timeout 服務的例子:
    http://developer.51cto.com/art/201311/415900_1.htm

app.controller('ServiceController', ['$scope', '$timeout', 'githubService',     
  function($scope, $timeout, githubService) { 
    // ...
  }]
);

(angular 依賴注入有規範...)

(因爲 service 是單實例, 應用生命週期的, 因此) Services 能夠在多個 controller 之間共享數據.

(就這麼簡單? 主要是依賴注入支持?)

 

=== Routing 路由 ===

在單頁面應用中, 視圖之間的跳轉就顯尤其重要. 須要方法來精確控制 何時 該呈現 什麼頁面 給用戶.

方法: 把視圖打散成 layout 和模板視圖, 而後將這些 "碎片" 在佈局模板中拼接起來.
   angularjs 經過 $routeProvider 上聲明 routes 來實現上面的構想. 

第一步: 佈局模板

<header>   
  <h1>Header</h1>  --- 這樣每頁面都有 header
</header> 
<div class="content">   
  <div ng-view></div>   --- ng-view 告訴 $routeProvider 在這裏渲染模板
</div> 
<footer> <h5>Footer</h5> </footer>

第二步: 配置路由信息

兩種方法: when, otherwise. (看起來像 switch 語句...)

(前面略) 添加路由例子:

..config(['$routeProvider', function($rp) {
    $rp.when('/', {     // url 還能夠寫某種匹配/key, 假設當作正則看...
      controller: 'home_page_controller',
      template: '...We are homepage...'
    })
    .otherwise({
      ... 不在主頁的處理方式
     });
  }]);  --- 這麼多配對的各類括號, 看着很辛苦, 要是都省略掉... ...

(看着像寫了一個 when-each-case-and-otherwise 的語句...)

 

這裏介紹數種過濾器, 可加深對 angular 過濾器功能/用途的印象:
    http://developer.51cto.com/art/201310/414163_2.htm

建立自定義的過濾器:
   把它配置到 module 下便可.

angular.module('custom.filters', [])
  .filter('大寫化', function() {
    return ...具體大寫字符串實現...
  });

使用:

<div> UpperCase is: {{ 'hello world' | 大寫化 }} </div>
  --> 結果應該是 '上面函數處理的結果'

還有不少知識點未及談到的:
* Promises(可讓多個異步請求更加的有條理)
* 自定義指令; *$resource 服務; *單元測試(尤其重要, 推薦jasmine)
* end-to-end testing;  *midway testing; *i18n *auth & customize xhr req
* $provider -> custom service; * forms and validation; * ie compatiable;

原文連接: http://blog.jobbole.com/50533/

 

=======

如今彷佛對 angluarjs 略知一二了, 先試着看看程序, 有須要再回頭學.

相關文章
相關標籤/搜索