2014年8月3日 星期日

AngularJS 教學 - Ajax

AngularJS 教學 - MVC 介紹 中有特別提到 Model(模型) 的職責

其中一項就是用來跟後端作資料的操作 (CRUD)

而 AngularJS 提供了 REST 以及 Ajax 這兩種方式讓你能夠跟後端的應用程式作溝通

以下就介紹 AngularJS 的 Ajax 方法吧

首先 AngularJS 提供了 一個 Service 讓開發者能夠運用 Ajax,那個 Service 就叫做 $http

當你的模組需要用到 Ajax 的時候,可以將 $http 直接注入到你的模組中,就像 Controller 的 $scope 一樣

接著就看一下一個簡單的範例吧

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" ng-app="demoApp">
     <head>
         <title>Examples</title>
         <script type="text/javascript" src="js/angular.min.js"></script>
         <script>
              var demoApp = angular.module("demoApp", []);
              demoApp.factory("Todo", function($http){
                  return {
                       list: function(){
                            $http.get("todos.json").success(function (data) {
                                return data;
                            });
                       }
                  };
              });
              demoApp.controller("demoCtrl", function($scope, Todo){
                  $scope.loadData = function(){
                       $scope.todos = Todo.list();
                  }
             });
         </script>
     </head> 
     <body>
         <div ng-controller="demoCtrl">
              <button ng-click="loadData()">Load Todos</button></br>
              <table>
                  <tr>
                       <td>NO.</td><td>Name</td><td>Priority</td>
                  </tr>
                  <tr ng-repeat="todo in todos">
                       <td>{{todo.id}}</td>
                       <td>{{todo.name}}</td>
                       <td>{{todo.priority}}</td>
                  </tr>
              </table>
         </div>
     </body>

</html>



以上範例用 factory method 建立了一個 Todo 模型,負責 Todo 的 Ajax 操作

其中在 list 函式中,我注入了 $http ,並利用 $http 的 get 函式來取得 todo.json 的資料回來,如下

...
$http.get("todos.json"")

...

上面短短一行程式我們只是發出了一個 GET 的請求發法,$http 提供了更過的請求方式

例如 post、delete、put 等等,它們各自分別對應到 HTTP 協定中的 POST、DELETE、PUT

看完了請求方式之後,該如何處理 Response 呢?

AngularJS 利用了一個 Javascript 的 pattern 叫做 promises,用來呈現一個非同步操作的結果

寫過 jQuery 的 Ajax 的人應該也會理解這樣的一個過程

簡單來說就是 當你呼叫 $http 的 get、post、delete、put 之後會回傳一個 promise 的物件

這個物件提供了三個函式 

  • success(callback function) 當 HTTP 請求成功時會呼叫你定義的 callback 函式
  • error(callback function) 當 HTTP 請求失敗時會呼叫你定義的 callback 函式
  • then(fn, fn) 註冊 成功與失敗的 callback 函式

$http.get("todos.json").success(function (data) {
    return data;
});

其中 data 就是 todos.json 的 JSON 格式的資料了

沒有留言:

張貼留言