Shared service is a common way of communication between non-related components.
Your components need to use a single instance of the service, so make sure it's provided at the root level.
An example using the BehaviorSubject as a data delegate:
Shared service:
@Injectable()
export class SharedService {
isVisibleSource: BehaviorSubject<boolean> = new BehaviorSubject(false);
constructor() { }
}
Component 1:
export class Component1 {
isVisible = false;
constructor(private sharedService: SharedService) { }
onClick(): void {
this.isVisible = !this.isVisible;
this.sharedService.isVisibleSource.next(this.isVisible);
}
}
Component 2:
export class Component2 {
constructor(private sharedService: SharedService) { }
ngOnInit(): void {
this.sharedService.isVisibleSource.subscribe((isVisible) => {
console.log('isVisible: ', isVisible); // => true/false
});
}
}
It is worth mentioning that BehaviorSubject
upon a subscription returns the last value it holds, therefore the component from the example above will be updated with the most recent value immediately after the instantiation.
BehaviorSubject
also allows to get its most recent value without even subscribing to it:
this.sharedService.isVisibleSource.getValue(); // => true/false
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…