2015-01-03 2 views
0

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

Есть ли какое-либо решение для получения обновленных данных без перезагрузки страницы?

$scope.addToStage = function($index) { 
    event.stopPropagation(); 
    console.log($scope.items[$index].title); 

    $localForage.getItem('stage').then(function(data) { 
    if (data) { 
     $localForage.removeItem('stage'); 
     console.log('Item stage Removed!'); 
    }; 
    $localForage.setItem('stage', $scope.items[$index]).then(function(data) { 
     $localForage.bind($scope, 'stage'); 
    }) //setItem 
    }) 

    $ionicHistory.clearCache(); 
    $state.reload(); 
    $ionicHistory.goBack(); 
}; 

** Хотя я думаю, что это не моя вина кода, так как, когда я добавление новых элементов или удаление темы с помощью SetItem() и RemoveItem() нужна перезагрузка страницы, чтобы увидеть изменения в Developer Tools Ресурсов из.

** Как упоминалось в Mozilla Developer: IndexedDB первоначально включал как асинхронный API, так и синхронный API; Но синхронная версия была удалена из спецификации, поскольку ее потребность была сомнительной. Поэтому я думаю, что мой вопрос не имеет никакого абсолютного ответа в настоящее время, может быть, BTW любые ресурсы, статьи и ссылки полезны. :)

+0

Можете ли вы показать код? – FrEaKmAn

+0

@FrEaKmAn вопрос обновлен. нужны другие коды? – bobsilon

+0

** Хотя я думаю, что это не моя ошибка кода, поскольку, когда я добавляю новые элементы или удаляю тему с помощью setItem() и removeItem(), необходимо перезагрузить страницу, чтобы увидеть изменения в ресурсах Инструментов разработчика. – bobsilon

ответ

0

Я создал тестовый код

var app = angular.module('app', ['LocalForageModule']); 
app.config(['$localForageProvider', function($localForageProvider) 
{ 
    $localForageProvider.config({ 
     driver  : localforage.INDEXEDDB, // if you want to force a driver 
     name  : 'myApp', // name of the database and prefix for your data, it is "lf" by default 
     version  : 1.0, // version of the database, you shouldn't have to use this 
     storeName : 'keyvaluepairs', // name of the table 
     description : 'some description' 
    }); 
}]); 
app.controller('MyCtrl', ['$scope', '$localForage', function($scope, $localForage) 
{ 
    $scope.load = function() 
    { 
     $localForage.getItem('name').then(function(data) 
     { 
      console.log('Loaded ' + data + ' from DB'); 
      $scope.name = data; 
     }); 
    }; 

    $scope.save = function() 
    { 
     console.log('Saved ' + $scope.name + ' to DB'); 
     $localForage.setItem('name', $scope.name).then(function(){}); 
    }; 

    $scope.refresh = function() 
    { 
     $scope.load(); 
    }; 

    $scope.load(); 
}]);  

и HTML

<div ng-controller="MyCtrl"> 
    Hello <input ng-model="name" type="text" /><button ng-click="save()">save</button> 
    <br/><br/> 
    <button ng-click="refresh()">refresh</button> 
</div>  

Полный jsfiddle http://jsfiddle.net/kzwtyn2c/

Вы можете сохранить имя, и когда вы нажмете кнопку обновления, это будет регистрировать значение, полученное из базы данных.

Все работает, но, похоже, Chrome Developer Tools не обновляется. Даже если вы щелкните правой кнопкой мыши по таблице IndexedDB и нажмите Refresh IndexedDB, значение не изменится.

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

+0

задавалось вопросом, поняли ли вы это решение. –

Смежные вопросы