最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Angular2中的編程對象Observable

 更新時間:2016年09月17日 09:07:54   投稿:daisy  
大家都是在Reactive Extensions for Javascript誕生于幾年前,隨著angular2正式版的發(fā)布,它將會被更多開發(fā)者所認知。這篇文章我們來詳細介紹RxJs提供的Observable對象,有需要的朋友們可以參考借鑒。

前言

RxJs提供的核心是Observable對象,它是一個使用可觀察數(shù)據(jù)序列實現(xiàn)組合異步和事件編程。
跟這個很類似的異步編程模型是Promise,Promise是基于狀態(tài)變化的異步模型,一旦由等待狀態(tài)進入成功或失敗狀態(tài)便不能再次修改,當狀態(tài)變化時訂閱者只能夠拿到一個值;而Observable是基于序列的異步編程模型,隨著序列的變化,訂閱者可以持續(xù)不斷的獲取新的值。而且Promise只提供回話機制,并沒有更多的操作來支持對結(jié)果的復雜處理,而Observable提供了多種多樣的操作符,來處理運算結(jié)果,以滿足復雜的應(yīng)用邏輯。

在實際編程中,我們主要與三個對象打交道:Observable、observer、Subscription

以一個元素的click事件為例看看如何使用Observable:

var clickStream = new Rx.Observable(observer => {
var handle = evt => observer.next(evt);
element.addEventListener('click', handle);

return () => element.removeEventListener('click', handle);
});

subscription = clickStream.subscribe(evt => {
console.log('onNext: ' + evt.id);
}, err => {
console.error('onError');
}, () => {
console.log('onComplete');
});

setTimeout(() => {
subscription.unsubscribe();
}, 1000);

如果每個事件都需要這么包裝一下,豈不是太麻煩了,所以RxJs為我們提供了一個便利函數(shù):Observable.fromEvent來方便的銜接事件。

常見的鏈接操作符:concat、merge、combineLates等

投影操作:map、flatMap,flatMap需要重點介紹

過濾:filter、distinctUltilChanges、

操作符分類:Operators by Categories

錯誤處理:catch、retry、finally

減壓:debounce、throttle、sample、pausable

減少:buffer、bufferWithCount、bufferWithTime

想要掌握Observable的操作符先要學會看懂序列圖:

箭頭代表著隨時間變化的序列,比如在一個元素上不斷點擊鼠標,圓圈代表序列對外產(chǎn)生的影響,如每一次點擊元素都會觸發(fā)一次事件回調(diào),圓圈中的數(shù)字是對外發(fā)射的信息,如每一次事件的觸發(fā)都會有一個事件對象,代表本次操作的一些信息。

想要靈活的運用Observable處理復雜的邏輯,就要學會使用它提供的操作符。我將操作符分為兩類,單序列操作和復合序列操作,單序列操作是指的針對一個序列進行的操作運算,復合序列操作指的是對兩個或者多個序列進行處理的操作符,復合序列操作相對更難懂一些。

下面先看單序列操作,以map操作為例:

map操作是將一個序列中每次對外發(fā)射的信息做轉(zhuǎn)換,如上圖map將每次的發(fā)射值乘以十,那么當訂閱者訂閱之后每次得到的訂閱值就不再是原始的123而是經(jīng)過轉(zhuǎn)換后的10 20 30。通過序列圖能更方便的理解Observable的運算。

下面我們來看一個復合序列操作,以merge為例

merge操作的目的是將兩個獨立序列,合成一個序列。原本序列1隨著時間的前進,在100ms時發(fā)射a,在200ms時發(fā)射b,300ms時發(fā)射c,它的訂閱者在400ms將受到abc三個值;序列2在150ms時發(fā)射d,250ms時發(fā)射e,350ms時發(fā)射f,它的訂閱者在400ms內(nèi)收到def三個值。而merge之后的新序列將在400ms內(nèi)收到abcdef(注意順序)。

常用操作符的理解:

Observable.range:發(fā)射一定數(shù)量值得序列。

Observable.toArray: 在序列完成時將所有發(fā)射值轉(zhuǎn)換為一個數(shù)組。

Observable.flatMap: 將原始序列流中的元素轉(zhuǎn)化為一個新的序列流,并將這個新的序列流merge到原來的序列中元素的位置。

Observable.startWith: 它會設(shè)置Observable序列的第一個值

Observable.combineLatest: 類似于promiseAll,在所有序列有結(jié)果后才會執(zhí)行

Observable.scan: 將序列中每次發(fā)射的值可以做聚合,與reduce類似,reduce會將整個序列的值聚合起來,在序列完成時發(fā)送一個最終值

Observable.sample: 從持續(xù)的序列中取得一定的樣品

Observable.merge:將多個序列合并成一個,可以做OR來使用

Observable.timestamp: 能夠得到每個發(fā)射值的發(fā)射時的時間

Observable.distinctUntilChanged(compare, selector): selector取出用來比較的key,compare用來比較兩個key

Observable.takeWhile() 當參數(shù)為false時停止發(fā)射數(shù)據(jù)

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • Angular2使用jQuery的方法教程

    Angular2使用jQuery的方法教程

    這篇文章主要給大家介紹了關(guān)于Angular2使用jQuery的方法教程,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來跟著小編一起學習學習吧。
    2017-05-05
  • Angular依賴注入optional?constructor?parameters概念

    Angular依賴注入optional?constructor?parameters概念

    這篇文章主要為大家介紹了Angular?依賴注入領(lǐng)域里?optional?constructor?parameters?的概念及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 利用Jasmine對Angular進行單元測試的方法詳解

    利用Jasmine對Angular進行單元測試的方法詳解

    單元測試是一種能夠幫助開發(fā)者驗證代碼中某一部分有效性的技術(shù)。下面這篇文章主要給大家介紹了關(guān)于利用Jasmine對Angular進行單元測試的相關(guān)資料,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • AngularJs學習第五篇從Controller控制器談?wù)?scope作用域

    AngularJs學習第五篇從Controller控制器談?wù)?scope作用域

    這篇文章主要介紹了AngularJs(五)從Controller控制器談?wù)?scope作用域 的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • Angular中支持SCSS的方法

    Angular中支持SCSS的方法

    這篇文章主要介紹了Angular中支持SCSS的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 詳解使用angular-cli發(fā)布i18n多國語言Angular應(yīng)用

    詳解使用angular-cli發(fā)布i18n多國語言Angular應(yīng)用

    這篇文章主要介紹了詳解使用angular-cli發(fā)布i18n多國語言Angular應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 淺談angularJS中的事件

    淺談angularJS中的事件

    下面小編就為大家?guī)硪黄獪\談angularJS中的事件。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • AngularJS Phonecat實例講解

    AngularJS Phonecat實例講解

    這篇文章主要為大家詳細介紹了AngularJS Phonecat實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Angular2數(shù)據(jù)綁定詳解

    Angular2數(shù)據(jù)綁定詳解

    本篇文章主要介紹了Angular2數(shù)據(jù)綁定的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • AngularJS實現(xiàn)表格的增刪改查(僅限前端)

    AngularJS實現(xiàn)表格的增刪改查(僅限前端)

    這篇文章主要介紹了AngularJS實現(xiàn)表格的增刪改查,僅限前端,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論

清丰县| 崇州市| 沙湾县| 永登县| 义马市| 兴宁市| 合阳县| 南京市| 罗平县| 大姚县| 六枝特区| 岗巴县| 积石山| 襄垣县| 久治县| 乐山市| 林甸县| 临沧市| 永兴县| 大连市| 越西县| 普陀区| 铜山县| 津南区| 颍上县| 垫江县| 江源县| 武汉市| 西林县| 黔南| 东光县| 仁布县| 武定县| 靖西县| 六盘水市| 洛扎县| 九龙城区| 拜泉县| 锡林浩特市| 肇源县| 乌鲁木齐市|