Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SNS项目笔记<四>--RXjs简要用法

SNS项目笔记<四>--RXjs简要用法

作者头像
stormKid
发布于 2018-09-12 07:40:51
发布于 2018-09-12 07:40:51
1.1K00
代码可运行
举报
文章被收录于专栏:计算机编程计算机编程
运行总次数:0
代码可运行
关于RX系列,博主不需要多讲,源自C#开发,纯粹的响应链状式的编程,让大型项目的代码简略化以及底层优化。博主只要编程者记住一个概念就行,并不是所有编程适合RX,但是RX是解决动态响应,以及多线程的首选。Angular升级到2过后,一直延续着promise做流处理,但是它自身携带的RXjs又是处理流的利器。本篇从实战角度出发,简要的概括它的两个使用方法

1、极简HTTP请求

1.1、创建provider

在命令行输入ionic g provider youProviderName 在创建好后,系统会自动导入从@angular/http里导入Http这个类,方便后续做直接使用此类做HTTP请求。

1.2、请求头处理
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     定义全局头部
     1、指定Content-Type 和服务器互相以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请求
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//由于rxjs包很大,内容很多,我们取有需要的即可
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源码中是这样写的:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   /**
     * 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为可携带参数,所以在某些特定的情况下可以使用默认的头部进行HTTP请求

1.4、建立请求响应方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   //某个需要请求的类里:
   export class RealPage{
    constructor(public navCtrl: NavController, public navParams: NavParams, public baseService:BaseServiceProvider) {
    }
    param:any  //请求携带的参数,这里可以自定义为number、string、boolean、Array类型
    ionViewDidLoad(){
        //建立get请求
        this.baseService.get()
.subscribe(
            data => this.responseData = data, Error => {//请求失败,处理信息}, () => {//请求成功,ResponseData数据处理}
        );
        //建立post请求
        this.baseService.post(this.param)
.subscribe(
            data => this.responseData = data, Error => {//请求失败,处理信息}, () => {//请求成功,ResponseData数据处理}
        );

    }

} 

通过以上使用RXjs方法,我们很快的就完成了HTTP请求的搭建,很简单的响应式模式,很迅捷的编程体验RxJS,你值得使用。

1.5、简单理解Rx

很多人难以理解Rx,其实很简单,因为翻译文档很拗口,导致很多东西描述起来非常困难,当然想知道原理就得看源码去理解了。这里就简单理解,一个特殊的观察者,监听器--Observable,一个注册机制 --Subscribe, 一经注册便可拥有传输能力和响应机制,想使用,必须注册,就和需要啥啥权益注册很多会员一样,仅此而已。

2、回调监听--组件中通讯

在写ionic时发现当页面pop()的时候,竟无返回响应机制,这个时候,页面与页面就可以使用RXjs进行传播串接起来,类似于Android里面的EventsBus,Otto等。

2.1、封装provider

<<借鉴の博客>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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、监听与回调
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export class MainPage {
     constructor(public eventsBus:RxBus) {}

     ionViewDidLoad() {
        //注册监听器
        this.eventsBus.bus().subscribe(param=>{
                 //处理param
        })
      }

}  
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export class NextPage {
      constructor(public eventsBus:RxBus,public nav:NavController) {}
      
      //回到MainPage页面
      backClick(){
             // 设置回调
             this.eventsBus.setListener("param");
             this.nav.pop();
      }
}

这样一来,MainPage就会接收到来自NextPage的param,非常好的实现了页面间的通讯。

结尾的话:这就是Rx的代码魅力,非常简单的完成很多任务,后面会有相册处理方面的博文,到时候着重讲解RXjs处理文件的方式,尽请期待!
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.07.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SNS项目笔记<七>--深入探究RXjs
在正常使用RX做监听的时,时不时有些页面需要重复点击进入,这样在进入该页面的时候,会产生多次触发subscribe方法,这个时候往往会出现多次赋值或者多次提交操作,即浪费资源,也让某些功能直接成为了Bug。于是博主就寻找了一天的源码与探讨了方法,特此记录下来。
stormKid
2018/09/12
8740
SNS项目笔记<七>--深入探究RXjs
Angular 从入坑到挖坑 - HTTP 请求概览
angular 入坑记录的笔记第四篇,介绍在 angular 中如何通过 HttpClient 类发起 http 请求,从而完成与后端的数据交互。
程序员宇说
2020/03/24
6.4K0
Angular 从入坑到挖坑 - HTTP 请求概览
RxJS速成 (下)
Subject Subject比较特殊, 它即是Observable又是Observer. 作为Observable, Subject是比较特殊的, 它可以对多个Observer进行广播, 而普通的Observable只能单播, 它有点像EventEmitters(事件发射器), 维护着多个注册的Listeners. 作为Observable, 你可以去订阅它, 提供一个Observer就会正常的收到推送的值. 从Observer的角度是无法分辨出这个Observable是单播的还是一个Subject. 从
solenovex
2018/03/29
2.7K0
RxJS速成 (下)
Angular 快速学习笔记(1) -- 官方示例要点
创建组件 ng generate component heroes {{ hero.name }} {{}}语法绑定数据 管道pipe 格式化数据 <h2>{{ hero.name | uppercase }} Details</h2> [(ngModel)] 双向绑定,form需要引入FormsModule AppModule 放置元数据(metadata) a. @NgModule 装饰器 imports导入外部模块 b. declarations 放置组件 @NgModule({ decl
JadePeng
2018/05/28
4.5K0
关于RxJS 自定义封装Rxbus的使用规范文档
2.3、声明isInner为true的情况: 主要是在push页面之前,即进入子页面:
stormKid
2018/09/12
9580
RxJS速成
RxJS是ReactiveX编程理念的JavaScript版本。ReactiveX是一种针对异步数据流的编程。简单来说,它将一切数据,包括HTTP请求,DOM事件或者普通数据等包装成流的形式,然后用强大丰富的操作符对流进行处理,使你能以同步编程的方式处理异步数据,并组合不同的操作符来轻松优雅的实现你所需要的功能
solenovex
2018/03/25
4.9K6
RxJS速成
使用angular4和asp.net core 2 web api做个练习项目(二), 这部分都是angular
完成client.service.ts: import { Injectable } from '@angular/core'; import { Http, Headers } from '@angular/http'; import { Observable } from 'rxjs/Observable'; import { ErrorHandler } from '@angular/core'; import 'rxjs/add/operator/map'; import 'rxjs/add/ope
solenovex
2018/03/01
4.7K0
使用angular4和asp.net core 2 web api做个练习项目(二), 这部分都是angular
Angular进阶教程2-<依赖注入+RxJS>
组件\color{#0abb3c}{组件}组件不应该直接获取或保存数据,它们应该聚焦于展示数据,而把数据访问和处理的职责委托给某个服务\color{#0abb3c}{服务}服务。那面对组件和服务之间的关系,该如何处理他们之间的依赖关系呢?Angular就引入了依赖注入框架\color{#0abb3c}{依赖注入框架}依赖注入框架去解决这件事情。
玖柒的小窝
2021/12/08
4.9K0
Angular进阶教程2-<依赖注入+RxJS>
RxJs简介
这两年,各种异步编程框架,上面RxJava,RxAndroid,RxSwift等等,今天要聊的是RxJs,对于我等入门不久的前端工程师来说,这个框架还是比较有新颖的,中文官网地址:http://cn.rx.js.org/
xiangzhihong
2022/11/30
4.1K0
竞态问题与RxJs
竞态问题通常指的是在多线程的编程中,输入了相同的条件,但是会输出不确定的结果的情况。虽然Js是单线程语言,但由于引入了异步编程,所以也会存在竞态的问题,而使用RxJs通常就可以解决这个问题,其使得编写异步或基于回调的代码更容易。
WindRunnerMax
2022/06/05
1.3K0
构建流式应用:RxJS 详解
作者:TAT.郭林烁 joeyguo 原文地址 最近在 Alloyteam Conf 2016 分享了《使用RxJS构建流式前端应用》,会后在线上线下跟大家交流时发现对于 RxJS 的态度呈现出两大类
腾讯AlloyTeam
2017/05/02
7.9K2
Angular4记账webApp练手项目之五(Angular4项目中创建service(服务)和使用http模块)
ng给我们创建的模块account.service.ts,内容如下。 有关@Injectable和@Component,都是angular中的关键字或者关键注解。通过注解来表明js文件的类型,以方便angular框架进行调用。 @Component表示该js文件所导出的类是组件。 @Injectable表示该js文件所导出的文件是服务,而服务是可以通过注入来创建的。 服务的注入,是angular中用来剥离controller和业务逻辑的方式。
易兒善
2018/08/21
1.6K0
Angular4记账webApp练手项目之五(Angular4项目中创建service(服务)和使用http模块)
Angular快速学习笔记(4) -- Observable与RxJS
介绍RxJS前,先介绍Observable 可观察对象(Observable) 可观察对象支持在应用中的发布者和订阅者之间传递消息。 可观察对象可以发送多个任意类型的值 —— 字面量、消息、事件。 基本用法和词汇 作为发布者,你创建一个 Observable 的实例,其中定义了一个订阅者(subscriber)函数。 当有消费者调用 subscribe() 方法时,这个函数就会执行。 订阅者函数用于定义“如何获取或生成那些要发布的值或消息”。 要执行所创建的可观察对象,并开始从中接收通知,你就要调用它的 s
JadePeng
2018/05/28
6.2K0
Rxjs 响应式编程-第二章:序列的深入研究
童年的回忆中的益智视频游戏,你必须使用各种技巧在屏幕上引导下降的水流。您可以拆分流,稍后将它们合并,或者使用倾斜的木板来改变它们的方向。你必须要有创造力才能使水达到最终目标。
frontoldman
2019/09/03
4.7K0
Rxjs 响应式编程-第二章:序列的深入研究
Rxjs 响应式编程-第一章:响应式
现实世界相当混乱:事件不按照顺序发生,应用崩溃,网络不通。几乎没有应用是完全同步的,所以我们不得不写一些异步代码保持应用的可响应性。大多数的时候是很痛苦的,但也并不是不可避免。
frontoldman
2019/09/02
2.6K0
Rxjs 响应式编程-第一章:响应式
Rxjs 响应式编程-第四章 构建完整的Web应用程序
在本章中,我们将构建一个典型的Web应用程序,在前端和后端使用RxJS。我们将转换文档对象模型(DOM)并使用Node.js服务器中的WebSockets进行客户端 - 服务器通信。
frontoldman
2019/09/03
3.9K0
Rxjs 响应式编程-第四章 构建完整的Web应用程序
RxJS & React-Observables 硬核入门指南
Redux-observable是一个基于rxjs的Redux中间件,允许开发者使用异步操作。它是redux-thunk和redux-saga的替代品。
前端修罗场
2022/07/29
7.4K0
RxJS & React-Observables 硬核入门指南
Rxjs 响应式编程-第三章: 构建并发程序
并发是正确有效地同时做几件事的艺术。为了实现这一目标,我们构建我们的程序来利用时间,以最有效的方式一起运行任务。 应用程序中的日常并发示例包括在其他活动发生时保持用户界面响应,有效地处理数百个客户的订单。
frontoldman
2019/09/03
3.9K0
Rxjs 响应式编程-第三章: 构建并发程序
RxJS在快应用中使用
Rx(ReactiveX)是一种用来管理事件序列的理想方法,提供了一套完整的 API,它的设计思想组合了观察者模式,迭代器模式和函数式编程。响应式编程在各个编程语言中都有对应的实现,应用较为广泛的是 RxJava 以及 RxJS。
dadong
2020/05/12
2.2K0
Angular 应用中手动调用 subscribe 方法的时机与实践探讨
在 Angular 应用开发过程中 Observable 扮演着处理异步操作与数据流的关键角色 RxJS 为 Angular 提供了丰富的操作符与工具链 开发者在编写业务逻辑时 往往会面临 Observable 的自动订阅与手动订阅之间的选择问题 手动调用 subscribe 方法的决策往往需要根据应用场景、数据流处理逻辑、内存管理策略以及异常处理机制来做出判断 下文将从多个角度深入分析在 Angular 应用中何种情况需要手动调用 subscribe 方法,并通过具体的代码示例说明代码运行效果
编程小妖女
2025/07/04
1260
Angular 应用中手动调用 subscribe 方法的时机与实践探讨
相关推荐
SNS项目笔记<七>--深入探究RXjs
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档