2016-02-10 141 views
6

我已閱讀其他帖子,討論其他技術在瀏覽器關閉時清理瀏覽器cookies的方式,但沒有一個顯示如何讓AngularJS執行此操作。 如何在瀏覽器關閉時觸發AngularJS中的Cookie移除方法運行?AngularJS在瀏覽器關閉時刪除所有cookies的方法

在AngularJS 1.4.8中,可以使用語法$cookies.remove('keyname')刪除cookie。我可以寫一個方法來刪除所有的cookie名稱。但是,如何確保在瀏覽器關閉時調用cookie刪除方法?如果我想要在關閉瀏覽器選項卡時調用方法,語法是否有所不同?


正在進行的努力:


作爲每@ User2341963的建議下,我的應用程序的主模塊中加入餅乾移除代碼到run方法。當我將它放在應用程序中的其他位置的logout()方法中時,同樣的確切代碼可以正確運行,但是當我在Firefox調試器中放置斷點並關閉瀏覽器時,我發現在瀏覽器關閉時從不運行Cookie刪除代碼。 在瀏覽器關閉的情況下,我對代碼做了哪些具體的更改以使Cookie全部被AngularJS刪除?

下面是應用程序的主要模塊的代碼,包括run()方法:

angular 
    .module('hello', [ 'ngRoute', 'auth', 'home', 'secure', 'public1', 'navigation' ]) 
    .config(

      function($routeProvider, $httpProvider, $locationProvider) { 

       $locationProvider.html5Mode(true); 

       $routeProvider 
       .when('/', { 
        templateUrl : 'js/home/home.html', 
        controller : 'home' 
       })//plus other routes 
       .otherwise('/'); 

       $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 

      } 
    ).run(['$cookies', '$window', '$log', function($cookies, auth, $window, $log) { 

     //other stuff 

     $window.onbeforeunload = function() { 
      // Clearing all cookies now! 
      $cookies.remove("AUTH1"); 
      $cookies.remove("AUTH2"); 
      $cookies.remove('procStep'); 
      $cookies.remove('usrname'); 
      $cookies.remove('exists'); 
      $cookies.remove('wid'); 
     }; 
    }]); 
+0

可能像[如何觸發窗口的功能關閉使用angularjs(http://stackoverflow.com /問題/ 30345446 /如何到觸發一個功能上用窗使用-angularjs特寫)?基本上設置window.onbeforeunload功能 – user2718281

+2

使用會話cookie。無需擔心清理 – charlietfl

+0

@ user2341963我應該將哪個控制器放入?該應用程序有很多控制器。該應用程序的主要模塊只有'module()','.config()'和'.run(){}'。 – CodeMed

回答

1

如果您只需要餅乾,因爲你需要它發送到後端服務器,您可以使用主控制器的$destroy事件。

使用$on.$destroy

此事件調用時被破壞有關控制器。

另一種選擇是使用angularjs sessionStorage

時自動關閉窗口

會話存儲刪除

+0

我無法驗證您的答案,因爲我現在正在處理其他問題。但是,謝謝你和+1,試圖幫助其他人解決這個老問題。其他人請驗證這一點,並發表評論說明驗證。 – CodeMed