为什么在共享服务中使用 Subject 或 BehaviorSubject,没有 observable 就不能实现?

兰詹

为了在组件之间共享数据,我们使用共享服务与 Subject 或 BrhaviorSubject observable,如下所示,

import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs';

@Injectable()
export class DataService {
    private subject = new Subject<any>();

    // Method to set navmenu //
    public sendData(data: boolean) {
        this.subject.next(data);
    }

    // Method to clear navmenu //
    public clearData() {
        this.subject.next();
    }

    // Method to get navmenu //
    public getData(): Observable<any> {
        return this.subject.asObservable();
    }
}

但是我们可以在不使用 Subject 或 BehaviorSubject observable 的情况下实现相同的目标。在下面的示例中,组件 A 和 B 都共享 EmailService 的实例,因此如果组件 A 更改了值 (emailService.apiKey),则组件 B 中的值也会相同,反之亦然,如下所示,

class EmailService{
  public apiKey: string = 'ABCD1234';
}

@Component({
  selector: 'component-a',
  template: `
  Component A - {{emailService.apiKey}}
  <button (click)="changeApiKey()">Change Key</button>
  `
})

export class A{
  public emailService: EmailService;
  constructor(emailService: EmailService){
    this.emailService = emailService;
  }

  changeApiKey(){
    this.emailService.apiKey = "XYZ1234";
  }
}

@Component({
  selector: 'component-b',
  template: `
  Component B - {{emailService.apiKey}}
  <button (click)="changeApiKey()">Change Key</button>
  `
})

export class B{
  public emailService: EmailService;
  constructor(emailService: EmailService){
    this.emailService = emailService;
  }

  changeApiKey(){
    this.emailService.apiKey = "ABCD1234";
  }
}

@Component({
  selector: 'app-root',
  template: `

    <component-a></component-a>
    <br />
    <component-b></component-b>
  `,
  providers: [
    EmailService
  ]
})

export class AppComponent {

}

Can someone please explain why most of the examples and tutorials use observable in shared service. What's the advantage in using that ??
阿米特·奇加达尼

Subject并且BehaviourSubject在这种情况下很有帮助,当component 2想要根据数据变化采取一些行动时,component 1反之亦然

如果您不使用任何publish/subscribe模式,如SubjectBehaviorSubject,则很难观察数据变化并执行操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么没有客户端就不能控制服务器?

来自分类Dev

没有“新”就不能使用我的“类型” ComplexNumber-为什么?

来自分类Dev

为什么没有花括号就不能创建1语句函数?

来自分类Dev

为什么这段代码没有空格就不能解析?

来自分类Dev

Perl:没有括号就不能使用正则表达式

来自分类Dev

类构造函数 BehaviorSubject 在 Bs Datepicker 中没有“new”就不能被调用

来自分类Dev

update() 的主要目的是什么?为什么我的代码没有 update() 就不能工作?

来自分类Dev

为什么我不能在共享服务器上使用node.js?

来自分类Dev

何时使用Subject,BehaviorSubject和真实示例

来自分类Dev

不抛出异常就不能使用Path(file)

来自分类Dev

Rx.js,使用Subject 从Observable 进行多播

来自分类Dev

为什么共享服务没有在各个组件之间进行更新?

来自分类Dev

我该如何解决此错误:错误:没有光纤就不能等待吗?

来自分类Dev

空的 while 循环,没有它代码就不能工作

来自分类Dev

无法在 Angular 5 中的孙组件之间共享 Observable Subject 服务

来自分类Dev

为什么数据类不能实现Serializable?

来自分类Dev

有没有办法在同一个变量下有一个 Subject 和 Observable

来自分类Dev

为什么不参考Outlook库就不能使用MailItem.BodyFormat?

来自分类Dev

为什么在Ruby on Rails中不使用!important就不能更改link_to文本颜色?

来自分类Dev

为什么不参考Outlook库就不能使用MailItem.BodyFormat?

来自分类Dev

为什么我不能在 observable 中使用 switchMap

来自分类Dev

为什么我的CREATE TABLE语句不带反引号就不能运行?

来自分类Dev

为什么不从NSObject继承类就不能迅速采用协议?

来自分类Dev

为什么不选中就不能在字节上工作?

来自分类Dev

带有 Observable 实现的 Angular 服务

来自分类Dev

具有 BehaviorSubject 的共享服务未发出正确的值

来自分类Dev

如果有输出,就不能更改标题吗?

来自分类Dev

扩展 js.native 类会产生 TypeError:没有“new”就不能调用类构造函数

来自分类Dev

Subject.asObservable有什么用?

Related 相关文章

  1. 1

    为什么没有客户端就不能控制服务器?

  2. 2

    没有“新”就不能使用我的“类型” ComplexNumber-为什么?

  3. 3

    为什么没有花括号就不能创建1语句函数?

  4. 4

    为什么这段代码没有空格就不能解析?

  5. 5

    Perl:没有括号就不能使用正则表达式

  6. 6

    类构造函数 BehaviorSubject 在 Bs Datepicker 中没有“new”就不能被调用

  7. 7

    update() 的主要目的是什么?为什么我的代码没有 update() 就不能工作?

  8. 8

    为什么我不能在共享服务器上使用node.js?

  9. 9

    何时使用Subject,BehaviorSubject和真实示例

  10. 10

    不抛出异常就不能使用Path(file)

  11. 11

    Rx.js,使用Subject 从Observable 进行多播

  12. 12

    为什么共享服务没有在各个组件之间进行更新?

  13. 13

    我该如何解决此错误:错误:没有光纤就不能等待吗?

  14. 14

    空的 while 循环,没有它代码就不能工作

  15. 15

    无法在 Angular 5 中的孙组件之间共享 Observable Subject 服务

  16. 16

    为什么数据类不能实现Serializable?

  17. 17

    有没有办法在同一个变量下有一个 Subject 和 Observable

  18. 18

    为什么不参考Outlook库就不能使用MailItem.BodyFormat?

  19. 19

    为什么在Ruby on Rails中不使用!important就不能更改link_to文本颜色?

  20. 20

    为什么不参考Outlook库就不能使用MailItem.BodyFormat?

  21. 21

    为什么我不能在 observable 中使用 switchMap

  22. 22

    为什么我的CREATE TABLE语句不带反引号就不能运行?

  23. 23

    为什么不从NSObject继承类就不能迅速采用协议?

  24. 24

    为什么不选中就不能在字节上工作?

  25. 25

    带有 Observable 实现的 Angular 服务

  26. 26

    具有 BehaviorSubject 的共享服务未发出正确的值

  27. 27

    如果有输出,就不能更改标题吗?

  28. 28

    扩展 js.native 类会产生 TypeError:没有“new”就不能调用类构造函数

  29. 29

    Subject.asObservable有什么用?

热门标签

归档