2017-06-29 19 views
2

$watchはクッキーの有効期限が切れているようです。ここに試したコードですAngularJSでCookieの有効期限を検出する方法は?

$scope.$watch(function(){ 
     return $cookies.get('cookies') 
    },function(newVal,oldVal){ 
     if(!newVal){ 
      console.log('ok') 

     } 
    }) 

$intervalで確認できます。しかし、私は2秒ごと、または5秒ごとにコールダイジェストサイクルを望んでいません。

+0

'$のscope.watch'は、すべての2S'よりも頻繁にクッキーを見たり – harishr

+0

@harishrはいを5s'、私がクッキーを削除したり、クッキーがある場合 – Akashii

+0

ウォッチ機能のみがトリガされた有効期限が切れたときに、それは動作しないように見えるだろうダイジェストサイクル。ダイジェストサイクルがない場合、ウォッチ機能は実行されず、クッキーの有効期限は検出されません。指定された間隔でダイジェストサイクルを開始することが保証されている$ intervalを使用します。 – georgeawg

答えて

1

残念ながら、it is not possible to read the cookie expiration time in JS私はそれらを繰り返し実行し、有効期限を過ぎてもアクションを実行することはできません。

"cookie check"ごとにダイジェストを開始しない場合は、$intervalの4番目のパラメータをfalseに設定して、ダイジェストを起動しないようにすることができます。 $interval docsを参照してください。

例コード:

.run(function($cookies, $interval) { 
    var previouslyAvailableCookies = Object.keys($cookies.getAll()); 
    var watchCookieChanges = function() { 
    var availableCookies = Object.keys($cookies.getAll()); 
    var expiredCookies = previouslyAvailableCookies.filter(function(cookieName) { return availableCookies.indexOf(cookieName) < 0; }); 
    var newCookies = availableCookies.filter(function(cookieName) { return previouslyAvailableCookies.indexOf(cookieName) < 0; }); 
    if (expiredCookies.length || newCookies.length) { 
     document.writeln("<p>New cookies: " + newCookies 
         + "<br>Expired cookies: " + expiredCookies + '</p>'); 
    } 
    previouslyAvailableCookies = availableCookies; 
    }; 
    $interval(watchCookieChanges, 3000, 0, false); 
}) 

codepen

+0

「呼び出しを無効にする」と良い考えに感謝します。投票した – Akashii