zoukankan      html  css  js  c++  java
  • RxJS核心概念之Subjet在angular2+上的应用

    Subject,在RxJS中是一类特殊的Observable(可观察对象),它可像多个Observer(观察者)推送值。
    每一个Subject也可以作为Observer(观察者) Subject同样也是一个由next(v),error(e),和complete()这些方法组成的对象。调用next(theValue)方法后,Subject会向所有已经在其上注册的Observer多路推送theValue。

    1、创建一个subjectService,实现可观察以及推送推功能

    import {Injectable} from "@angular/core";
    import { ReplaySubject } from "rxjs/ReplaySubject";
    import { Observable } from "rxjs/Observable";
    import 'rxjs/add/observable/of';
    
    @Injectable() export class SubjectService { private _subject: ReplaySubject<string> = new ReplaySubject<string>(1); //新建一个可观测可观测
      setCurrentValue(value: string): Observable<boolean> { //设置值
        this._subject.next(value);
        return Observable.of(true);
      } currentValue(): Observable<string> {//推送值
        return this._subject.asObservable();
      } }

    2、在组建中设置需要推送的值

    constructor(private _subjectService: SubjectService) { }
    setValue() { this._subjectService.setCurrentValue('value').subscribe((result: boolean) => { if (!result) { console.log('可观察者设定失败');
          return;
        } console.log('可观察者设定成功');
      });
    }

    3、订阅、可订阅多个对象

    subjectValue = '';
    
    constructor(private _subjectService: SubjectService) { } ngOnInit() { this._subjectService.currentValue().subscribe((data: string) => { if (!data) { console.log('获取失败');
          return;
        } this.subjectValue = data;
      });
    }

    参考网址

    https://segmentfault.com/a/1190000005069851

  • 相关阅读:
    Map的遍历示例
    vue+jquery使用FormData向后端传递数据和文件,express如何获取
    express+mongodb实现简单登录注册
    vue+express上传头像到数据库中img的路径
    vue父子组件之间相互传值
    express+mysql实现简单的登录注册功能
    固定底部菜单栏,点击跳转到指定路由
    js中的小案例(一)
    使用vue实现购物车功能
    git的日常使用
  • 原文地址:https://www.cnblogs.com/ymh2013/p/9985593.html
Copyright © 2011-2022 走看看