I am using ionic 2 framework and I have tried using local storage to store a network status
this.local = new Storage(LocalStorage);
this.local.set("status", this.status);
There are 2 values that, "Strong" and "Weak" that can be assigned to status dynamically.
I am able to get my the initial value of my local storage "status" value on initialization of every page.
toCheckStatus();
function toCheckStatus()
{
self.local = new Storage(LocalStorage);
self.local.get('status').then((value) =>
{
console.log("status", value);
});
}
this will return me a "Strong" or "Weak", which is what I want, but is there any methods or event to dynamically (On "status" value change) call "toCheckStatus()" function?
Workflow Example (pseudo-code):
- On application start -> Check internet status (Background will keep checking and update local-storage value)
- Store status to local-storage
- Call a function to get the value (How to dynamically call this function when my value change, is there any method?)
- If Status is Weak -> Show Weak Icon
- If Status is Strong -> Show Strong icon
This can be achieved with a
BehaviorSubject
along with the Storage module from Ionic.Create a BehaviorSubject that you call
.next()
whenever you set a key in Storage and subscribe to that BehaviorSubject to get the updated value.A code example of this:
This will set a key in local storage which will be logged to the console, and asynchronously update that key after 5 seconds which then will be logged again to the console. You could refactor the setting of the key and updating the BehaviorSubject to a function.
A better solution will be using
observables
. You can useobservables
in your methods to emit events when a property is changed and then execute the code you need to execute.This is a very simple example of using
observables
:And then in your page:
===========================================
EDIT:
If you need to update something in the view, beacuse of something that has changed in the background, you will have to let Angular know of that change. One way to do it is by using
Zones
. You can check my answer here to know how to do it.Would it suffice to poll it? It might not be the cleanest way but it would get the data you need.