2015-04-23 35 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]; 
        } 
       } 
相关问题