2015-07-10 206 views
0

在下面我尝试测试一个对象是否已经存储在localstorage中,如果不是,用初始变量填充它。localstorage得到后对象不更新

var TimerData = $localstorage.getObject("TimerData", "{}"); 

if(!TimerData.hasOwnProperty("timerState")) { 
    TimerData["timerState"]    = "run"; 
    TimerData["timeOutMode"]   = false; 
    TimerData["timeOutStartDate"]  = null; 
    console.log("test line", TimerData) 
}; 

然而,在行“检测线”运行控制台尽管我之前变量行充满TimerData返回{}

$localstorage.getObject如下所示:

getObject: function(key, fallBack) { 
     return JSON.parse($window.localStorage[key] || fallBack); 
}, 

我的猜测是,操作处理异步的问题(从localStorage的获取数据需要更长的时间)。

这怎么能克服?

+3

'$ window'呢? '$ localstorage'? '$'字符是什么? –

+0

可能与async无关。无论如何,本地存储应该是同步的。你有没有尝试添加更多'console.log'行? 'getObject'调用之后立即得到了什么? – light

+0

如果你在jQuery变量中存储'localStorage'和'window',我的问题是“为什么”?如果没有,请删除'$',并确保'localStorage'上有适当的camelcasing。 –

回答

1

Jakee1有正确的想法,但,但你问的角... 而不是

var TimerData = $localstorage.getObject("TimerData", "{}");

我会创造本地存储,然后为其分配一个var。

$localStorage.$default({TimerData: {}}); 
var TimerData = $localStorage.TimerData; 

这只会设置的localStorage以{}如果不存在ETY

1

它看起来像你正在将“TimerData”的值设置为一个空对象。

我认为你可以使用标准的js符号来简化它(你肯定不需要一个特殊的$ localstorage适配器,因为你使用的是离子)。离子应该尊重标准的js符号(在我的部分虽然纯属猜测)

  var TimerData = localStorage.get("TimerData"); 

      if (!TimerData.timerState) { 
       TimerData["timerState"] = "run"; 
       TimerData["timeOutMode"] = false; 
       TimerData["timeOutStartDate"] = null; 
       console.log("test line", TimerData) 
      }