asObservable()使用

在angualr文档 ------> 组件交互------> 父组件和子组件通过服务来通讯中遇到一段代码

private missionAnnounceSource = new Subject<string>();
private missionConfirmedSource = new Subject<string>();
  
missionAnnounced$ = this.missionAnnounceSource.asObservable();
missionConfirmed$ = this.missionConfirmedSource.asObservable();

这里使用了Rxjs中的Subject, 查了一下文档发现Subject是一个特殊的Observable,它允许将值多播给多个观察者
而且 每个 Subject 都是 Observable 每个 Subject 都是观察者 也就是说Subject可以被订阅,同时也具有观察者的三种方法:next,error,component
所以我们将代码改一下:

/* mission.service.ts */
missionAnnounced$ = this.missionAnnounceSource;
missionConfirmed$ = this.missionConfirmedSource;
/* missioncontrol.compolent.ts */
announce() {
  let mission = this.missions[this.nextMission++];
    
  this.missionService.missionConfirmed$.next('hello'); // 新增代码
    
  this.missionService.announceMission(mission);
  this.history.push(`Mission "${mission}" announced`);
  if (this.nextMission >= this.missions.length) { this.nextMission = 0; }
}

我们可以在页面看到这样的效果

image.png

说明在这里我们已经将service拿到的值做了更改,然而我们再这里使用Subject的目的是让其作为Observables使用,
因此我们使用asObservable() 做一点处理

/* mission.service.ts */
missionAnnounced$ = this.missionAnnounceSource.asObservable();
missionConfirmed$ = this.missionConfirmedSource.asObservable();

我们再看一下效果


image.png

这里出现了一个错误,说next()不存在,这说明了Subject不在作为观察者使用了
再将代码做一点更改

/* missioncontrol.compolent.ts */
announce() {
  let mission = this.missions[this.nextMission++];
    
  //this.missionService.missionConfirmed$.next('hello'); // 删除这行代码,程序将正常运行
    
  this.missionService.announceMission(mission);
  this.history.push(`Mission "${mission}" announced`);
  if (this.nextMission >= this.missions.length) { this.nextMission = 0; }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 介绍 RxJS是一个异步编程的库,同时它通过observable序列来实现基于事件的编程。它提供了一个核心的类型:...
    泓荥阅读 16,799评论 0 12
  • 第一节:初识Angular-CLI第二节:登录组件的构建第三节:建立一个待办事项应用第四节:进化!模块化你的应用第...
    接灰的电子产品阅读 15,787评论 31 77
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,695评论 19 139
  • 发现 关注 消息 RxSwift入坑解读-你所需要知道的各种概念 沸沸腾关注 2016.11.27 19:11*字...
    枫叶1234阅读 2,943评论 0 2
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,326评论 25 708

友情链接更多精彩内容