2015-04-23 36 views
10

我需要清除所有的$scope值,同時執行一些操作。

對於例如:如果我點擊"Signout"按鈕重定向到"signin"頁面,那麼所有的$範圍$ rootScope會話值應該被清除。

我該如何做到這一點?

+0

在這裏你可以找到一些方法來實現這一目標:http://stackoverflow.com/questions/13085024/reset-a-model-with-angular-js – frhd

+0

@frhd。感謝它清楚。使用這個例子,我們可以清除特定控制器中的$ scope值。但是我想在簽出期間清除所有控制器中的所有$ scope值。可能嗎?如果是的話,給我你的建議/解決方案.. – Gnik

+0

我不認爲有一種方法可以清除所有的範圍。如http://stackoverflow.com/a/18527334/2491198所述,您需要通知所有範圍刪除其數據。避免必須這樣做的一種方法是將數據存儲在** DataService **中,並在註銷時將其清除。 – frhd

回答

16

你可以做到以下幾點:

$rootScope = $rootScope.$new(true); 
$scope = $scope.$new(true); 

功能$new正在創造一個新的作用域繼承了父變量。 true阻止繼承。

但這不是正確的方法,因爲如果你使用上面的東西,你應該手動引導控制器功能並重新創建範圍樹。

This可能很有用,但想法是將存儲初始化數據的想法存儲在某些變量中,然後在將其分配時複製到顯示的變量中。

正確的解決方法是手動清除各範圍的每個屬性上註銷事件是這樣的: 註銷事件:

$rootScope.$emit("logout"); 

鳳雲事件:

$rootScope.$on("logout", function(){ 
     $rootScope.myData = undefined; 
}); 

或者所建議的評論,使用服務,然後進行清理。

0
   You not want delete scope 
       var authScope =['authLogo','currentPath','pageTitle','app'];      
       for (var prop in $rootScope) { 
        if (prop.substring(0,1) !== '$') { 
         if(authScope.indexOf(prop) ==-1) 
          delete $rootScope[prop]; 
        } 
       } 
相關問題