Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2017, 09:03
Аспирант
Отправить личное сообщение для ExXxTaSy Посмотреть профиль Найти все сообщения от ExXxTaSy
 
Регистрация: 25.07.2012
Сообщений: 32

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;
});
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2017, 09:41
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

ExXxTaSy,
Цитата:
набросал 2 вараинта. какой то из них хоть немного приближен к реальности?))
https://github.com/gsklee/ngStorage/...Storage.js#L21
Цитата:
а вот как хранить данные в обьекте и как сделать данный сервис публичным что бы по всему проекту его могли использовать не пойму.
Ну так это обычный service, который собственно создается 1 раз и инжектится в нужные места.
app.service('foo', function() {
  this.bar = 'baz'
});
Ответить с цитированием
  #3 (permalink)  
Старый 26.01.2017, 09:54
Аспирант
Отправить личное сообщение для ExXxTaSy Посмотреть профиль Найти все сообщения от ExXxTaSy
 
Регистрация: 25.07.2012
Сообщений: 32

Сообщение от destus Посмотреть сообщение
ExXxTaSy,
https://github.com/gsklee/ngStorage/...Storage.js#L21
пример этот видел. он прям весь необходим? как то много там всего и кажется лишнего. или там как раз "полный спектр необходимого мне" ?
я думал что вариант решения попроще. что то из моего дописать никак?
а то мне не совсем понятно что в том примере происходит. не все моменты.
Ответить с цитированием
  #4 (permalink)  
Старый 26.01.2017, 09:55
Аспирант
Отправить личное сообщение для ExXxTaSy Посмотреть профиль Найти все сообщения от ExXxTaSy
 
Регистрация: 25.07.2012
Сообщений: 32

Сообщение от Rise Посмотреть сообщение
ExXxTaSy, приватный режим есть не только в сафари.
но только они ставят размер хранилища 0 в данном режиме по умолчанию.
ну а вообще то да уже это делать для всех браузеров.
Ответить с цитированием
  #5 (permalink)  
Старый 26.01.2017, 09:56
Аспирант
Отправить личное сообщение для ExXxTaSy Посмотреть профиль Найти все сообщения от ExXxTaSy
 
Регистрация: 25.07.2012
Сообщений: 32

Сообщение от destus Посмотреть сообщение
ExXxTaSy,

Ну так это обычный service, который собственно создается 1 раз и инжектится в нужные места.
app.service('foo', function() {
  this.bar = 'baz'
});
как он инжектится? сори за тупые вопросы. только начал изучать. инфы в голове масса и каша. не все понятно как использовать.
Ответить с цитированием
  #6 (permalink)  
Старый 26.01.2017, 10:12
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

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

Цитата:
как он инжектится?
angular
	.module('moduleName', [])
	.service('foo', function() {
		this.bar = 'baz'
	})
	.controller('FooCtrl', ['foo', function(foo){
		alert(foo.bar);
	}])
Ответить с цитированием
  #7 (permalink)  
Старый 26.01.2017, 11:08
Аспирант
Отправить личное сообщение для ExXxTaSy Посмотреть профиль Найти все сообщения от ExXxTaSy
 
Регистрация: 25.07.2012
Сообщений: 32

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

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


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

и в примере не 20 строк а около 200 без коментов
Ответить с цитированием
  #8 (permalink)  
Старый 26.01.2017, 11:36
Аспирант
Отправить личное сообщение для ExXxTaSy Посмотреть профиль Найти все сообщения от ExXxTaSy
 
Регистрация: 25.07.2012
Сообщений: 32

такс. начинаю врубатся.
мне нужно подрубить это файл что вы бросили в ссылке.

а далее что то типа

ngular.module('app', [
        'ngStorage'
      ]).
      
      controller('Ctrl', function(
        $scope,
        $localStorage
      ){
        $scope.$storage = $localStorage.$default({
           ...
        });
      });


вот тут то и должно как то происходить типа работа с выбором хранилища?
Ответить с цитированием
  #9 (permalink)  
Старый 26.01.2017, 11:45
Аспирант
Отправить личное сообщение для ExXxTaSy Посмотреть профиль Найти все сообщения от ExXxTaSy
 
Регистрация: 25.07.2012
Сообщений: 32

так. если я верно понял.
нужно подключить тот скрипт что вы бросили.
далее как то его использовать по принципу
angular.module('app', [
        'ngStorage'
      ]).
      
      controller('Ctrl', function(
        $scope,
        $localStorage
      ){
        $scope.$storage = $localStorage.$default({
          x: 42
        });
      });


только не пойму как
Ответить с цитированием
  #10 (permalink)  
Старый 26.01.2017, 11:46
Аспирант
Отправить личное сообщение для ExXxTaSy Посмотреть профиль Найти все сообщения от ExXxTaSy
 
Регистрация: 25.07.2012
Сообщений: 32

я еще больше запутался
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LocalStorage удаление данных neon_tmn Общие вопросы Javascript 8 21.10.2016 15:22
Вакансия "Старший специалист по развитию HP Service Manager" Kseniya_Stolyarova Работа 3 01.10.2015 19:13
jQuery навигация, утечка памяти Foxeh AJAX и COMET 8 19.04.2015 16:53
Не сохраняется localStorage после перезагрузки браузера Бобр Firefox/Mozilla 1 20.10.2011 20:31
Почему в FF не исполняется клонированный тэг script? NT Man Firefox/Mozilla 0 15.11.2009 16:00