在我的控制器中,我将数据存储为$scope.$parent.dossierSummaries = data;
但在注销并登录后,应用程序$scope.$parent.dossierSummaries
会保留相同的旧数据。
我在退出时这样做
.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.']);
});
答案 0 :(得分:3)
init()
函数来获取该模型的值。因此,每次您从服务器获得正确的数据。
代码示例和文档:http://docs.angularjs.org/guide/dev_guide.services.creating_services
答案 1 :(得分:3)
手动跟踪和清理内容的另一种方法是broadcast
(或其他自定义事件)上的rootScope
'注销'事件。然后在控制器或服务中监听事件以清理数据。
广播:
$rootScope.broadcast('logout');
观看活动(例如在服务中):
$rootScope.on('logout',function(){
dossiers = [];
});
答案 2 :(得分:2)
我认为没有任何有效的方法来实现它。任何对象(控制器,指令,过滤器或事实上任何js对象)都可以保存对另一个对象的引用(在您的情况下是用户),并且无法轻易确定谁都持有引用。
如果你明确地或者当对象持有者的引用被销毁时,引用只会被释放。
您可以尝试的是
$rootScope.user.username='';
$rootScope.role=0;
假设某个对象正在跟踪此特定对象,则现在将清除数据。
答案 3 :(得分:2)
如果您在注销时不小心屏幕闪烁,可以使用以下方法刷新页面:
$window.location.replace($window.location.toString().split('#')[0]);
这会清除所有$scope
和$rootScope
变量,在我的情况下已经解决了这个问题。
答案 4 :(得分:0)
如果你想清除$ scope,我认为你可以使用它的构造函数方法或 proto (原型),它在构造函数中使用。我相信你可以这样做将范围重置为初始状态。如果有人对此有所了解,请随时发表评论。