为了在组件之间共享数据,我们使用共享服务与 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
模式,如Subject
或BehaviorSubject
,则很难观察数据变化并执行操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句