SNS項目筆記<四>--RXjs簡要用法

關(guān)于RX系列与纽,博主不需要多講,源自C#開發(fā)塘装,純粹的響應(yīng)鏈狀式的編程急迂,讓大型項目的代碼簡略化以及底層優(yōu)化。博主只要編程者記住一個概念就行氢哮,并不是所有編程適合RX,但是RX是解決動態(tài)響應(yīng)型檀,以及多線程的首選冗尤。Angular升級到2過后,一直延續(xù)著promise做流處理胀溺,但是它自身攜帶的RXjs又是處理流的利器裂七。本篇從實戰(zhàn)角度出發(fā),簡要的概括它的兩個使用方法

1仓坞、極簡HTTP請求

1.1背零、創(chuàng)建provider

在命令行輸入ionic g provider youProviderName 在創(chuàng)建好后,系統(tǒng)會自動導(dǎo)入從@angular/http里導(dǎo)入Http這個類无埃,方便后續(xù)做直接使用此類做HTTP請求徙瓶。

1.2、請求頭處理
/**
     定義全局頭部
     1嫉称、指定Content-Type 和服務(wù)器互相以json交互<RequestBody 為json>
     2侦镇、指定ACCESS_TOKEN用于登陸驗證
*/
private header = new Headers({
    'Content-Type': 'application/json',
    'ACCESS_TOKEN': this.getToken()
  });

getToken() {
    let token = localStorage.getItem("token");
    return token || ""
  }

自定義請求頭后我們可以完全掌握與后臺的請求對接方式,在后期無論以表單傳文件织阅,或者是soap請求方面都可以自定義壳繁,這里只做簡單的說明。

1.3、get闹炉、post請求
//由于rxjs包很大蒿赢,內(nèi)容很多,我們?nèi)∮行枰募纯?import 'rxjs/add/operator/map';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch' 
export class BaseServiceProvider{
......
/**
使用自定義頭部option
*/
private option = new RequestOptions({heads:this.header})

/**
get請求渣触,注冊請求體
url:請求url
ResponseBody: 自定義pojo類
*/
get():Observable<ResponseBody>{
    return this.http.get(url,this.option)
.map(response=>response.json())
.catch(this.handleError)
}

/**
post請求羡棵,注冊請求體
url:請求url
ResponseBody:自定義pojo類
*/
post(param):Observable<ResponseBody>{
    return this.http.post(url,{'key',param},this.option)
.map(response=>response.json())
.catch(this.handleError)
}


//這里直接使用官方教程的類,處理錯誤信息
private handleError(error: Response | any) {
    this.dialog.dismiss();
    let errMsg: string;
    if (error instanceof Response) {
      const body = error.json() || '';
      const err = body.error || JSON.stringify(body);
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
    } else {
      errMsg = error.message ? error.message : error.toString();
    }
    console.error(errMsg);
    return Observable.throw(errMsg);
  }
......

注意:這里的get昵观,post源碼中是這樣寫的:
   /**
     * Performs a request with `get` http method.
     */
    get(url: string, options?: RequestOptionsArgs): Observable<Response>;
    /**
     * Performs a request with `post` http method.
     */
    post(url: string, body: any, options?: RequestOptionsArgs): Observable<Response>;

option為可攜帶參數(shù)晾腔,所以在某些特定的情況下可以使用默認(rèn)的頭部進(jìn)行HTTP請求

1.4、建立請求響應(yīng)方法
   //某個需要請求的類里:
   export class RealPage{
    constructor(public navCtrl: NavController, public navParams: NavParams, public baseService:BaseServiceProvider) {
    }
    param:any  //請求攜帶的參數(shù)啊犬,這里可以自定義為number灼擂、string、boolean觉至、Array類型
    ionViewDidLoad(){
        //建立get請求
        this.baseService.get()
.subscribe(
            data => this.responseData = data, Error => {//請求失敗剔应,處理信息}, () => {//請求成功,ResponseData數(shù)據(jù)處理}
        );
        //建立post請求
        this.baseService.post(this.param)
.subscribe(
            data => this.responseData = data, Error => {//請求失敗语御,處理信息}, () => {//請求成功峻贮,ResponseData數(shù)據(jù)處理}
        );

    }

} 

通過以上使用RXjs方法,我們很快的就完成了HTTP請求的搭建应闯,很簡單的響應(yīng)式模式纤控,很迅捷的編程體驗RxJS,你值得使用碉纺。

1.5船万、簡單理解Rx

很多人難以理解Rx,其實很簡單骨田,因為翻譯文檔很拗口耿导,導(dǎo)致很多東西描述起來非常困難,當(dāng)然想知道原理就得看源碼去理解了态贤。這里就簡單理解舱呻,一個特殊的觀察者,監(jiān)聽器--Observable悠汽,一個注冊機制 --Subscribe箱吕, 一經(jīng)注冊便可擁有傳輸能力和響應(yīng)機制,想使用柿冲,必須注冊殖氏,就和需要啥啥權(quán)益注冊很多會員一樣,僅此而已姻采。

2雅采、回調(diào)監(jiān)聽--組件中通訊

在寫ionic時發(fā)現(xiàn)當(dāng)頁面pop()的時候爵憎,竟無返回響應(yīng)機制,這個時候婚瓜,頁面與頁面就可以使用RXjs進(jìn)行傳播串接起來宝鼓,類似于Android里面的EventsBus,Otto等巴刻。

2.1愚铡、封裝provider

<<借鑒の博客>>

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class RxBus{

    private param: any;
    private subject: Subject<any> = new Subject()

    setListener(param: any): void {
        this.param= param;
        this.subject.next(param);
    }

    bus(): Observable<any> {
        return this.subject.asObservable();
    }
}
2.2、監(jiān)聽與回調(diào)
export class MainPage {
     constructor(public eventsBus:RxBus) {}

     ionViewDidLoad() {
        //注冊監(jiān)聽器
        this.eventsBus.bus().subscribe(param=>{
                 //處理param
        })
      }

}  
export class NextPage {
      constructor(public eventsBus:RxBus,public nav:NavController) {}
      
      //回到MainPage頁面
      backClick(){
             // 設(shè)置回調(diào)
             this.eventsBus.setListener("param");
             this.nav.pop();
      }
}

這樣一來胡陪,MainPage就會接收到來自NextPage的param沥寥,非常好的實現(xiàn)了頁面間的通訊。

結(jié)尾的話:這就是Rx的代碼魅力柠座,非常簡單的完成很多任務(wù)邑雅,后面會有相冊處理方面的博文,到時候著重講解RXjs處理文件的方式妈经,盡請期待淮野!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吹泡,隨后出現(xiàn)的幾起案子骤星,更是在濱河造成了極大的恐慌,老刑警劉巖爆哑,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洞难,死亡現(xiàn)場離奇詭異,居然都是意外死亡揭朝,警方通過查閱死者的電腦和手機队贱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萝勤,“玉大人露筒,你說我怎么就攤上這事呐伞〉凶浚” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵伶氢,是天一觀的道長趟径。 經(jīng)常有香客問我,道長癣防,這世上最難降的妖魔是什么蜗巧? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮蕾盯,結(jié)果婚禮上幕屹,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好望拖,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布渺尘。 她就那樣靜靜地躺著,像睡著了一般说敏。 火紅的嫁衣襯著肌膚如雪鸥跟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天盔沫,我揣著相機與錄音医咨,去河邊找鬼。 笑死架诞,一個胖子當(dāng)著我的面吹牛拟淮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侈贷,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼惩歉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了俏蛮?” 一聲冷哼從身側(cè)響起撑蚌,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搏屑,沒想到半個月后争涌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡辣恋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年亮垫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伟骨。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡饮潦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出携狭,到底是詐尸還是另有隱情继蜡,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布逛腿,位于F島的核電站稀并,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏单默。R本人自食惡果不足惜碘举,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搁廓。 院中可真熱鬧引颈,春花似錦耕皮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至李丰,卻和暖如春苦锨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趴泌。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工舟舒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗜憔。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓秃励,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吉捶。 傳聞我的和親對象是個殘疾皇子夺鲜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)呐舔,斷路器币励,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,288評論 25 707
  • 一.背景介紹 Rx(Reactive Extension -- 響應(yīng)式擴(kuò)展 http://reactivex.io...
    愛上Shu的小刺猬閱讀 2,048評論 1 3
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,855評論 6 342
  • 左右不過是寫自己的小情緒。我也覺得這樣寫作是沒多大出息珊拼,可是食呻,心里覺得煩悶了,如果連文字都不接受澎现,溢滿胸懷的煩悶到...
    茶潤人生閱讀 120評論 2 0