Тестовое задание на Angular. Создание и управление localStorage’ем

Aleksandr Serenko
F.A.F.N.U.R
Published in
2 min readJul 5, 2021

Теперь создадим сервис, который позволит нам сохранять данные в LocalStorage.

Данный шаг, тоже не является обязательным. Вы можете смело использовать хранилище (localStorage) напрямую. Все что будет описано ниже, необходимо для решения критичных моментов, но это не обязательно делать в тестовом задании.

Так как использовать Web API напрямую не рекомендуется, добавим специальный сервис, который позволит работать с хранилищем безопасно.

Создадим папку core/storage/common/interfaces. Создадим интерфейс для работы с хранилищем и добавим абстрактный класс.

AsyncStorage — представляет интерфейс по работе с хранилищем. Если обычное Web хранилище, это key-value хранилище где есть много ключей и значений, то мы делаем так, чтобы все знания(state) были сохранены только в одном месте с соответствующим ключем. Это позволит нам не размазывать логику по приложению, а также контролировать чтение и запись.

AbstractStorage — абстрактная реализация для LocalStorage и SessionStorage, где их различия только в том, какое веб хранилище используется для чтения и записи.

Так как в некоторых устройствах может не быть доступ к хранилищу, добавим утилиту на доступность:

И если хранилище не доступно, добавим фейковое хранилище:

Также отметим, что в AbstractStorage, при записи в хранилище стоит try/catch — это необходимо для того, чтобы когда у клиента кончилась память приложение не падало с ошибкой.

Добавим реализации для localStorage и sessionStorage:

Данные сервисы мы делаем providerIn: ‘root’ специально, для того, чтобы наши импорты сервисов не раздувались, да и формально это всего-лишь обертка над стандартным API.

Ссылки

Вернуться к оглавлению — Введение.

Следующая статья — Установка redux и создание root store.

Предыдущая статья — Создание базовых интерфейсов.

UPD: Немного вариативности

Иногда есть потребность в нативных хранилищах. И тогда можно немного подправить интерфейсы и получить следующее:

Тогда реализация для:

LocalStorage

SessionStorage

В реализации приведены хранилища для Sync и Async случаев при работе с хранилищами.

Ссылки

Вернуться к оглавлению — Введение.

Следующая статья — Установка redux и создание root store.

Предыдущая статья — Создание модулей и компонентов.

Все исходники на github/fafnur/barinb.

Группа в Medium: https://medium.com/fafnur
Группа в Vkontakte: https://vk.com/fafnur
Группа в Facebook: https://www.facebook.com/groups/fafnur/
Telegram канал: https://t.me/f_a_f_n_u_r
Twitter: https://twitter.com/Fafnur1
LinkedIn: https://www.linkedin.com/in/fafnur

--

--

Aleksandr Serenko
F.A.F.N.U.R

Senior Front-end Developer, Angular evangelist, Nx apologist, NodeJS warlock