Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   localstorage service script (https://javascript.ru/forum/misc/67063-localstorage-service-script.html)

ExXxTaSy 26.01.2017 09:03

localstorage service script
 
помогите добить скрипт. примерно понимаю что нужно сделать, но не до конца могу понять как реализовать.
пытаюсь решить проблемы с локальным хранилещем в сафари(при включенном privat mode)

мне нужно написать сервис который будет проверять работает ли локальное хранилище и если не работает то хранить данные в обьекте.
проверку примерно вроде как сделал.
а вот как хранить данные в обьекте и как сделать данный сервис публичным что бы по всему проекту его могли использовать не пойму.
по идее должен быть публичный метод какой то.
больше всего не понимаю как хранить данные потому что они по всему проекту разные.
набросал 2 вараинта. какой то из них хоть немного приближен к реальности?))
///v1
var localStorage = angular.module('moduleName', []);
moduleName.factory('localStorageService', function() {
    var storageSupportedService;
    //isStorage?
    var hasLocalStorageSupport = 'localStorage' in $window && $window.localStorage !== null;
    if (hasLocalStorageSupport) {
        var testKey = 'key';
        try {
            $window.localStorage.setItem(testKey, '1');
            $window.localStorage.removeStorage(testKey);
        } catch  (e) {
            // $scope.result = object;
            // return $scope.result;
            // localStorage.setItem( "obj", JSON.stringify( obj ) );
            hasLocalStorageSupport = false;
        }
    }
    return storageSupportedService;
});

///v2
var localStorage = angular.module('moduleName', []);
moduleName.factory('localStorageService', function() {
    var storageSupportedService;
    //isStorage?
    function isLocalStorageSupported() {
        var testKey = 'key', storage = window.localStorage;
        try {
            storage.setItem(testKey, '1');
            storage.removeItem(testKey);
            return localStorageName in window && window[localStorageName];
        } catch (error) {
            // return $scope.result;
            // localStorage.setItem( "obj", JSON.stringify( obj ) );
            return false;
        }
    }
    return storageSupportedService;
});

destus 26.01.2017 09:41

ExXxTaSy,
Цитата:

набросал 2 вараинта. какой то из них хоть немного приближен к реальности?))
https://github.com/gsklee/ngStorage/...Storage.js#L21
Цитата:

а вот как хранить данные в обьекте и как сделать данный сервис публичным что бы по всему проекту его могли использовать не пойму.
Ну так это обычный service, который собственно создается 1 раз и инжектится в нужные места.
app.service('foo', function() {
  this.bar = 'baz'
});

Rise 26.01.2017 09:48

ExXxTaSy, приватный режим есть не только в сафари.

ExXxTaSy 26.01.2017 09:54

Цитата:

Сообщение от destus (Сообщение 442339)

пример этот видел. он прям весь необходим? как то много там всего и кажется лишнего. или там как раз "полный спектр необходимого мне" ?
я думал что вариант решения попроще. что то из моего дописать никак?
а то мне не совсем понятно что в том примере происходит. не все моменты.

ExXxTaSy 26.01.2017 09:55

Цитата:

Сообщение от Rise (Сообщение 442341)
ExXxTaSy, приватный режим есть не только в сафари.

но только они ставят размер хранилища 0 в данном режиме по умолчанию.
ну а вообще то да уже это делать для всех браузеров.

ExXxTaSy 26.01.2017 09:56

Цитата:

Сообщение от destus (Сообщение 442339)
ExXxTaSy,

Ну так это обычный service, который собственно создается 1 раз и инжектится в нужные места.
app.service('foo', function() {
  this.bar = 'baz'
});

как он инжектится? сори за тупые вопросы. только начал изучать. инфы в голове масса и каша. не все понятно как использовать.

Rise 26.01.2017 10:03

Цитата:

Сообщение от ExXxTaSy (Сообщение 442343)
но только они ставят размер хранилища 0 в данном режиме по умолчанию.

А ты проверял что ставят другие в этом режиме судя по ответу нет.

destus 26.01.2017 10:12

Цитата:

пример этот видел. он прям весь необходим? как то много там всего и кажется лишнего. или там как раз "полный спектр необходимого мне" ?
ну там 30 строчек кода, со всеми отступами и т.д., у тебя -- 20. Что именно испугало?
Цитата:

что то из моего дописать никак?
6 строка нельзя так писать без try/catch
$window.localStorage ...

Цитата:

как он инжектится?
angular
	.module('moduleName', [])
	.service('foo', function() {
		this.bar = 'baz'
	})
	.controller('FooCtrl', ['foo', function(foo){
		alert(foo.bar);
	}])

Rise 26.01.2017 10:43

Цитата:

Сообщение от ExXxTaSy (Сообщение 442342)
он прям весь необходим?

Комментарии можно не использовать.

ExXxTaSy 26.01.2017 11:08

Цитата:

Сообщение от Rise (Сообщение 442350)
Комментарии можно не использовать.

про комменты я знаю)
то есть если я возьму этот кусок
.module('moduleName', [])

	    .service('foo', function() {
                this.bar = 'baz'
	    })
	    .controller('FooCtrl', ['foo', function(foo){
	        alert(foo.bar);
	    }])


в него вставлю то что вы по ссылке дали, то все будет ок?)
теперь вопрос что куда ставить) сорри. я просто немного изменил квалификацию, и на жутких нервах, постоянно в панике. нужно както бы успокоиться)

и в примере не 20 строк а около 200 без коментов


Часовой пояс GMT +3, время: 06:51.