在"AngularJS中轉換響應內容"中,體驗瞭如何轉換響應內容。本篇來體驗如何轉換請求內容。
主頁面通過onSend方法把request物件轉遞出去。
<form name="form"> <textarea ng-model="request.message" required></textarea> <input ng-model="request.tags"> </form> <button ng-click="onSend($event, form.$valid)">傳送</button>
request物件和onSend方法被定義在了controller中。
angular.module('api.controllers') .controller('controllers.View',['$scope', 'services.Api', function($scope, api){ $scope.request = { message: "", tags:"" }; $scope.onSend = function(event, valid){ event.preventDefault(); if(valid){ api.send($scope.request).then(function(result){ $scope.request.message = ""; $scope.request.tags = ""; }) } } }]);
以上,控制器依賴了services.Api這個服務,該服務封裝了post請求。
angular.module('api.services').factory('services.Api',['$q', '$http', 'services.transformer.ApiRequest', function($q, $http, apiRequestTransformer){ return { send: function(message){ var deferred = $q.defer(); $http({ method: "POST", url: "", data: message, transformRequest: apiRequestTransformer }).success(function(data){ deferred.resolve(data); }); return deferred.promise; } } }]);
而$http服務中的transformRequest欄位就是用來轉換請求的。services.transformer.ApiRequest服務用來實施具體的轉換。
angular.module('api.transformers').factory('services.transformer.ApiRequest', function(){ return function(data){ return JSON.stringify(data); } })