Storage
Back your stores with localStorage
, sessionStorage
or any other mechanism you wish.
Installation
Usage
Import the NgxsStoragePluginModule
into your app module like:
It is recommended to register the storage plugin before other plugins so initial state can be picked up by those plugins.
Options
The plugin has the following optional values:
key
: State name(s) to be persisted. You can pass a string or array of strings that can be deeply nested via dot notation. If not provided, it defaults to all states using the@@STATE
key.storage
: Storage strategy to use. This defaults to LocalStorage but you can pass SessionStorage or anything that implements the StorageEngine API.deserialize
: Custom deserializer. Defaults toJSON.parse
serialize
: Custom serializer. Defaults toJSON.stringify
migrations
: Migration strategiesbeforeSerialize
: Interceptor executed before serializationafterDeserialize
: Interceptor executed after deserialization
Key option
The key
option is used to determine what states should be persisted in the storage. key
shouldn't be a random string, it has to coincide with your state names. Let's look at the below example:
In order to persist all states there is no need to provide the key
option, so it's enough just to write:
But what if we wanted to persist only NovelsState
? Then we would have needed to pass its name to the key
option:
It's also possible to provide a state class as opposed to its name:
And if we wanted to persist NovelsState
and DetectivesState
:
Or using state classes:
You can even combine state classes and strings:
This is very handy to avoid persisting runtime-only states that shouldn't be saved to any storage.
Custom Storage Engine
You can add your own storage engine by implementing the StorageEngine
interface.
Serialization Interceptors
You can define your own logic before or after the state get serialized or deserialized.
beforeSerialize: Use this option to alter the state before it gets serialized.
afterSerialize: Use this option to alter the state after it gets deserialized. For instance, you can use it to instantiate a concrete class.
Migrations
You can migrate data from one version to another during the startup of the store. Below is a strategy to migrate my state from animals
to newAnimals
.
In the migration strategy, we define:
version
: The version we are migratingversionKey
: The identifier for the version key (Defaults to 'version')migrate
: A function that accepts a state and expects the new state in return.key
: The key for the item to migrate. If not specified, it takes the entire storage state.
Note: Its important to specify the strategies in the order of which they should progress.
Last updated