Angular 中自定義 toJSON 操作符
如果對 RxJS 的 operators (操作符) 不熟悉的話,建議讀者在閱讀本文時,先閱讀RxJS - Observables, observers 和 operators 簡介這篇文章。
基礎知識什麼是 Operator
Operator 是一個函數,它接收一個 Observable 對象,然後返回一個新的 Observable 對象。當我們訂閱新返回的 Observable 對象時,它內部會自動訂閱前一個 Observable 對象。
如何為 Observable 添加操作符
比較常見的有以下三種方式:
1.使用 ES7 函數綁定運算符 (可使用BabelJS進行轉換)
someObservable::mySimpleOperator(x => x + ! );
2.繼承 Observable 類,並重寫 方法
class MyObservable extends Observable { lift(operator) { const observable = new MyObservable(); // res.json());
對於每個介面,我們都需要調用 map 操作符對返回的數據做對應的處理。那能不能簡化這個操作呢?答案是有的,我們可以通過自定義一個 toJSON 操作符來簡化上述的過程。具體實現如下:
function toJSON(): Observable { return this.map(( response : Response ) => response.json()); }
上面代碼中, 指向源 Observable 對象,即調用 http 對象的 方法後返回的 Observable 對象。此外我們直接返回了調用 操作符後新建的 Observable 對象。
為了能夠使用我們自定義的 操作符,我們需要把它添加到 Observable 的原型對象上:
最後的一件事是我們需要添加以下的定義:
declare module "rxjs/Observable" { interface Observable { toJSON : typeof toJSON; } }完整示例custom-operators.tsapp.module.tsimport { BrowserModule } from @angular/platform-browser ; import { NgModule } from @angular/core ; import { HttpModule } from "@angular/http"; import { AppComponent } from ./app.component ; import ./custom-operators ; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, HttpModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }app.component.tsimport { Observable } from rxjs/Observable ; import { Component, OnInit } from @angular/core ; import { Http } from @angular/http ; import rxjs/add/operator/map ; interface Member { id: string; login: string; avatar_url: string; } @Component({ selector: app-root , template: ` Angular Orgs Members
※InnoDB undo日誌與歷史系統基礎
※為什麼我會選擇 React 而不是 Vue?–Steven Poulton–Medium
※詳解 DNN 在聲學應用中的模型訓練
※富士 TIARA II,高顏值小巧的膠片隨身機
TAG:推酷 |
※Promise介面是AngularJS組織API的基礎
※AngularJS中的MVC模式
※Angular 6 LazyLoading 變化
※AngularJS篇 1.AngularJS不入門
※Angular、React 當前,Vue.js 優劣幾何?
※Vue.js 為何能逆襲 Angular 和 React 而主導前端?
※使用 Angular CLI 搭建項目
※容器化分散式日誌組件ExceptionLess的Angular前端UI
※Angular 6 正式發布:統一框架、Material和CLI 三大模塊
※Angular和Vue.js 深度對比
※Google的Angular 迫使我放棄了 Web 開發
※前端基於angular6的ionic3,後端基於springmvc post get請求實現
※Angular.js 發布,Web 前端框架
※angularjs 點擊div外面,隱藏該div
※使用 Angular 5.0和Spring Boot 2.0 構建一個基本的 CRUD 應用
※乾貨 Angular組件測試
※Angular 8正式發布!
※如何用Angular5創建一個PWA項目
※Web 前端框架 Angular 發布 7.0 首個 beta 版
※前端圈小可愛Vue的自白:我年少成名卻又屢陷React、Angular混戰