2016-02-08 78 views
1

当我最初调用该函数:JS功能消失

var session = function(){ 
    console.error(service.get()); 
    if(service.get().session === undefined){ 
     $localStorage.user.session = { 
      timeLeft: 0, // Time left until a user session ends (in minutes). 
      start: function(timeLeft) { 
       $localStorage.user.session.timeLeft = timeLeft; 
       $localStorage.user.session.interval; 
      }, 
      stop: function(){ 
       $interval.cancel($localStorage.user.session.interval); 
      }, 
      interval: $interval(function() { 
       $localStorage.user.session.timeLeft -= 1; 

       if($localStorage.user.session.timeLeft <= 0){ 
        $state.go('signin'); 
       } 
      }, 0.125 * 60000) 
     }; 
    } 

    return $localStorage.user.session; 
}; 

function sessionRestart(){ 
    session(); 
}; 
sessionRestart(); 

,它创建的所有变量session对象,但是当我重新加载页面它不填充作为函数的变量。我该如何解决这个问题?


编辑 该应用程序是AngularJS,我使用ngStorage$localStorage,代码是为能在我的申请里factory找到用户会话。

+2

我不知道它是如何工作的angularjs,但在'localstorage'你只可以存储纯文本数据,因此您的JSON或对象必须字符串化。 –

+1

@MarcosPérezGudeOP不直接使用localStorage,所以没关系。 – dfsq

+1

@dfsq好的,我说'我不知道它是如何在angularjs中工作的,因为那个。但如果没关系,那好吧:) –

回答

0

MarcosPérezGude让我想到了解决问题的办法。哪一个将$interval移到$localStorage之外解决了我的问题。不知道为什么它不起作用。

现在,该代码如下所示:

var session, 
    startSession: function(timeLeft) { 
     if($localStorage.user.session === undefined){ 
      if(timeLeft === undefined){ 
       timeLeft = 0; 
      } 

      $localStorage.user.session = { 
       timeLeft: timeLeft 
      }; 
     } 

     if (session === undefined) { 
      session = $interval(function() { 
       $localStorage.user.session.timeLeft -= 1; 

       if($localStorage.user.session.timeLeft === undefined){ 
        service.stopSession(); 
       } 

       if($localStorage.user.session.timeLeft <= 0){ 
        $state.go('signin'); 
       } 
      }, 1 * 60000); // Time in milliseconds. Minutes * milliseconds = total milliseconds before the interval repeats. 
     } 
    }, 
    stopSession: function() { 
     $interval.cancel(session); 
     session = undefined; 
    };