Yesterday, we saw that LocalStorage
can be used as a persistent cache to store our data in the browser. Earlier, we covered that services are a cache of their own but have one instance per app/browser tab, which means that applications opened in multiple tabs can have an inconsistent state since they each have their own “singleton” services.
LocalStorage
can be used to share data between multiple tabs that render the same application. Even better, there is a storage
event that can be listened to to know when another tab updated LocalStorage
:
Using the Rxjs fromEvent
function, we can turn the above event listener into an Observable
:
And if we’re using Angular 16+, we can turn the above Observable
into a Signal
with one more function:
The above Signal
could be used in a service to synchronize data between tabs. Spying on that Signal
to see what’s going on in it is as easy as registering a side-effect on it using the effect
function:
You can see that code example on Stackblitz.