1

angular-localforage を使用しており、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() を使用してテーマを削除したりする場合、開発者ツールのリソースの変更を確認するには、ページをリロードする必要があるため、コードのせいではないと思います。

** Mozilla Developerで言及されているように: IndexedDB にはもともと非同期 API と同期 API の両方が含まれていました。しかし、必要性が疑わしいため、同期バージョンは仕様から削除されました。ですから、私の質問には現時点で絶対的な答えはないと思います。ところで、リソース、記事、リンクは役に立ちます。:)

4

1 に答える 1

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 デベロッパー ツールが更新されていないようです。IndexedDB テーブルを右クリックして [IndexedDB の更新] をクリックしても、値は変わりません。

私の場合、開発者ツールをリロードすると変更されました(そのため、それらを非表示にして再度表示します)。回避策ですが、バグだと思います。

于 2015-01-04T14:16:40.700 に答える