• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Angular網絡請求的封裝方法

    來源:懂視網 責編:小采 時間:2020-11-27 22:14:09
    文檔

    Angular網絡請求的封裝方法

    Angular網絡請求的封裝方法:很多時候,我很喜歡angular的編碼風格,特別是angular支持typescript之后,完整的生命周期,完美的鉤子函數,都是別的語言所無法替代的。 這里我來說說我自己的網絡請求封裝,某種意義上來說,angular自己的網絡請求封裝的很好的,我們沒有必要再來畫蛇添足
    推薦度:
    導讀Angular網絡請求的封裝方法:很多時候,我很喜歡angular的編碼風格,特別是angular支持typescript之后,完整的生命周期,完美的鉤子函數,都是別的語言所無法替代的。 這里我來說說我自己的網絡請求封裝,某種意義上來說,angular自己的網絡請求封裝的很好的,我們沒有必要再來畫蛇添足

    很多時候,我很喜歡angular的編碼風格,特別是angular支持typescript之后,完整的生命周期,完美的鉤子函數,都是別的語言所無法替代的。

    這里我來說說我自己的網絡請求封裝,某種意義上來說,angular自己的網絡請求封裝的很好的,我們沒有必要再來畫蛇添足,但是,可能是我有那么一點點的代碼潔癖吧,喜歡自己的風格樣式,所以就有了這一點多余的東西。

    Angular的網絡請求

    這里是angular自己的網絡請求。

    1. url代表網絡請求地址,
    2. param網絡請求參數
    3. 網絡請求配置,例如:請求頭等
     this.http.post(url, param, config).subscribe(
     (res) => {
     //...請求成功
     }, (err) => {
     //...請求失敗
     }, () => {
     //...請求完成
     }
     );
    

    很多時候我覺得,每一次請求都要寫上subscribe里面的那些參數,很麻煩,或者說看起來覺得不喜歡,所以,我一般給自己封裝一個新的服務service。同時給每一個需要做網絡請求的組件component實現一個新的接口interface,這里面有很多都是源自java語言的設計思想。

    一個網絡接口

    這里創建一個網絡接口,來完成網絡請求的回調。

    export interface OnHttpImp {
    
     onResult(result: HttpResult, code?: number): void;
    
     onError?(err:any): void;
    
     onComplete?(): void;
    }
    
    export class HttpResult {
     code?: number;
     data?: any;
     msg?: string;
    }
    
    

    OnHttpImp 接口創建三個方法,分別是onResult,onError和onComplete,其中onComplete和onError是非必需實現的,onResult是必須實現的。這里的三個函數用來完成http的三個回調。

    那么,上面的網絡請求就可以移到新的服務CommonService里面,就會變成這樣:

     public post(url: string, param: FormData, callback: OnHttpImp, code?: number) {
     url = Config.base + url;
     const headers = new Headers();
     headers.append('Content-Type', 'application/x-www-form-urlencoded');
     this.http.post(url, param, {}).subscribe(
     (res) => {
     if (code) {
     callback.onResult(res, code);
     } else {
     callback.onResult(res);
     }
     }, (err) => {
     console.log(url + '===>' + JSON.stringify(err));
     }, () => {
     if (callback.onComplete) {
     callback.onComplete();
     }
     }
     );
     }
    

    這里面的url和param就不用多解釋了,callback就是一個OnHttpImp的實例,作用就是把網絡請求返回的數據回調到對應的component里面,這樣就可以是數據處理和網絡請求相互分開。code是一個標識符,用來區分在一個組件里面發送多個請求時,實現數據的隔離。

    HttpResult是一個網絡請求返回數據的類,用來方便處理數據,可以適當根據自己的數據返回類型進行自定義封裝。

    調用的組件

    先看代碼:

    export class LoginComponent implements OnInit, OnHttpImp {
     public validateForm: FormGroup;
     public username_control: AbstractControl;
     public password_control: AbstractControl;
    
     constructor(private fb: FormBuilder,
     private http: HttpUtil) {
     }
    
     ngOnInit() {
     this.validateForm = this.fb.group({
     'userName': [null, [Validators.required]],
     'password': [null, [Validators.required]],
     remember: [true],
     });
     this.username_control = this.validateForm.controls['userName'];
     this.password_control = this.validateForm.controls['password'];
     }
    
    
     _submitForm() {
     const params = new FormData();
     const md5 = new Md5();
     const password = md5.appendStr(this.password_control.value).end();
     params.set('username', this.username_control.value);
     params.set('password', password.toString());
     this.http.post('/user/login', params, this);
     }
    
     onResult(result: HttpResult, code?: number): void {
     //如果多個網絡請求,需要傳入code值,根據code值來判斷請求來源
     //swthch(code){
     // case 100:
     // 
     // break;
     //}
     
     // 如果單個請求,直接處理請求結果。
     // console.log(result)
     
     }
    }

    上面的htpp請求傳輸的OnHttpImp對象是this,那么就說明LoginComponnt組件必須實現OnHttpImp接口,然后實現里面的函數onResult,onError和onComplete.

    這樣處理,就可以將http請求和,數據處理分開了,代碼的可讀性和簡潔性都有大大的提升。

    進一步的封裝方式

    1. 可以把上述里面component里面調用網絡請求時傳入的this,用一個統一的類MCallback來替代,統一處理返回的數據。
    2. 可以把所有的網絡請求統一放到一個服務里面,通過調用方法名來請求,這樣可以實現多次網絡請求的耦合,但是個人覺得有點過度封裝了。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Angular網絡請求的封裝方法

    Angular網絡請求的封裝方法:很多時候,我很喜歡angular的編碼風格,特別是angular支持typescript之后,完整的生命周期,完美的鉤子函數,都是別的語言所無法替代的。 這里我來說說我自己的網絡請求封裝,某種意義上來說,angular自己的網絡請求封裝的很好的,我們沒有必要再來畫蛇添足
    推薦度:
    標簽: 網絡 請求 封裝
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产香蕉国产精品偷在线| 久久精品国产精品亚洲人人 | 51视频国产精品一区二区 | 国产亚洲色婷婷久久99精品91| 精品9E精品视频在线观看 | 97久久久久人妻精品专区| 亚洲综合国产精品第一页| 国产三级精品三级| 亚洲国产精品久久久久婷婷软件| 国产午夜精品一区二区三区漫画| 亚洲午夜福利精品久久| 久久香综合精品久久伊人| 国产精品美女一区二区视频| 亚洲AⅤ永久无码精品AA| 精品国产一区二区22| 97国产视频精品| 久久久国产精品福利免费 | 无码人妻精品一区二区| 亚洲欧美日韩另类精品一区二区三区| 国产精品偷伦视频免费观看了 | 九九久久精品国产| 国产成人1024精品免费| 98香蕉草草视频在线精品看| 久久成人影院精品777| 国产精品免费精品自在线观看| 国产精品9999久久久久| 国精品无码一区二区三区左线 | 欧美精品/日韩精品/国产精品| 国产精品91av| 国产亚洲精品观看91在线| 国产精品欧美日韩| 欧美韩国精品另类综合| 99九九精品免费视频观看| 国产福利电影一区二区三区,欧美国产成人精品一 | 午夜精品久久久久久久久| 亚洲国产精品无码AAA片| 亚洲人成精品久久久久| 亚洲国产精品无码专区| 人人妻人人澡人人爽欧美精品| 亚洲第一极品精品无码久久| 久久精品中文字幕无码绿巨人|