2013-08-29 49 views
4

在我的控制器中,我將數據存儲爲$scope.$parent.dossierSummaries = data; ,但在註銷並登錄後,應用程序$scope.$parent.dossierSummaries保留了相同的舊數據。

我在angularJS日誌上這樣做出來

.success(function(response, status) { 
    if (response.status > 0) { 
     var u = $rootScope.user.username; 
     $cookieStore.remove('myapp'); 
     $rootScope.user = { username: '', role: 0 }; 
     success(u); 
    } 
    else { 
     error(response.messages); 
    } 
}) 
.error(function(response, status) { 
    error(['There was an error logging you out.']); 
}); 

回答

2

我不認爲這是實現這一目標的任何有效的方法。任何對象(控制器,指令,過濾器或實際上任何js對象)都可以引用另一個對象(對於您的案例用戶),並且無法輕鬆確定所有人都持有引用。

如果您明確地或者當對象持有者引用被銷燬時,引用將僅獲得釋放。

什麼,你可以嘗試是

$rootScope.user.username=''; 
$rootScope.role=0; 

假設某個對象的跟蹤數據將被清除,現在這個特定的對象。

3

,你不應該直接設置變量的控制,但你應該從服務檢索它來代替。因此,無論何時加載控制器,您都應該編寫一個init()函數來獲取該模型的值。所以每次你都會從服務器獲得正確的數據。

示例代碼,文檔:http://docs.angularjs.org/guide/dev_guide.services.creating_services

+0

什麼是清除存儲在服務中的數據的好方法? – user1354603

3

另一種手動跟蹤和清理東西的方法是在rootScope(或其他自定義事件)上的broadcast'註銷'事件。然後在您的控制器或服務中監聽事件以清理數據。

廣播:

$rootScope.broadcast('logout'); 

留意一個事件(在如服務):

$rootScope.on('logout',function(){ 
    dossiers = []; 
}); 
0

如果你想清除$範圍,我想你可以用它的構造方法,或proto(原型),用於構造函數。我相信你可以做到這一點重置範圍到初始狀態。如果有人對此有所瞭解,請隨時發表評論。

1

,如果你不介意稍微屏幕閃爍上登出,你可以用這樣的方法刷新頁面:

$window.location.replace($window.location.toString().split('#')[0]); 

這將清除所有的$scope$rootScope變量,在我的情況已經解決了這個問題。