国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

AngularJS封裝$http.post()實例詳解

2024-05-06 15:17:34
字體:
來源:轉載
供稿:網友

  AngularJS封裝$http.post()實例詳解

用了不是很長的時間跟了一個移動APP項目,用的是ionic + AngularJS + cordova框架,其間遇到過挺多問題,其中一個就是對Ajax的封裝問題。

其實針對封裝問題一直以來就沒停止過談論,不同的項目也有不同的需求,舉個典型的例子,我在做這個項目的時候因為一開始沒有考慮封裝問題所以被批評了,而我的一個朋友卻因為封裝了受到了批評……很尷尬不是么。

那么對于是否要封裝這個問題,究竟該怎么界定?其實這不是一個很復雜的問題,歸根到底就是一個收益比率的問題,如果項目規模不是很大,那么過多考慮封裝問題本身就沒什么意義,對于項目的收益極低;而對于規模大的項目來說,如果不封裝,那么潛在的風險就高得多,所以前期的投入也是值得的。

當然這個問題并不是我這樣一個小白能掰扯清楚的事情,今天就來說說如果考慮封裝的話,那么我會怎么處理。

angularjs中提供了一個服務http,它用來處理Ajax請求,這里我假設讀者是了解angularjs的,所以直奔主題:對于post請求該如何處理封裝。首先我需要確定一個事情,我能否排除所有使用者(項目團隊成員)的個性化需求(需特殊處理的情況)。如果我不能,那么我該如果開放接口才能將post請求還原,所以我需要一個出口返回http.post()。

第二點,我需要考慮每一個使用者在應答到來時如何處理結果,針對success和error兩種情況,我需要為他們提供一個處理邏輯的入口。

綜合上面兩點,我大概有了思路,我需要定義一個服務(公共服務),并且提供一個myPost方法,其中我允許使用者定義響應的回調,并且我允許他們取得更自由的處理方式,給他們一個原原本本的post()。好在js足夠靈活,所以我可以這樣來寫:

service('myHttpService', ['$http', function ($http) {  var myHttpPost = function (url, data, successFn, errorFn) {  }  return {    myHttp: function (url, data, successFn, errorFn) {      return myHttpPost(url, data, successFn, errorFn);  }  }}]);

如上,我會return內部定義的方法,這個方法允許使用者定義successFn和errorFn,即相應成功和失敗的回調,如此一來使用者大可放心的預先編寫數據的處理邏輯,而無需關心其他細節。

另外,我允許使用者拿到更加靈活的post(),那么我是這樣實現的:

var httpPromise = $http.post(url, data, {timeout: 30000});if (!angular.isDefined(successFn)) {  return httpPromise;}

如果使用者并沒有定義成功回調,好吧,這層封裝就當是不存在,我會把post()丟出去,由調用者自行處理。而如果調用者想預先定義的話,我應當在封裝中處理好他們的邏輯:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 曲沃县| 永春县| 通许县| 团风县| 新民市| 二手房| 华容县| 新绛县| 太康县| 泰顺县| 宁远县| 多伦县| 青铜峡市| 仁化县| 泸水县| 门源| 玛纳斯县| 许昌县| 洛阳市| 灵山县| 股票| 化德县| 屯门区| 中江县| 华坪县| 于田县| 大姚县| 广南县| 黔西县| 同江市| 伽师县| 江山市| 光山县| 玉溪市| 什邡市| 乐都县| 梁平县| 大方县| 南投县| 泸定县| 祁阳县|