我有一个包含一些指令的索引文件-
<div ng-if="$hide">
<ba-sidebar></ba-sidebar>
<page-top></page-top>
<div class="al-main">
<div class="al-content">
<content-top></content-top>
<div ui-view></div>
</div>
</div>
</div>
<div ng-if="!$hide">
<login-view></login-view>
</div>
它的作用是显示用户成功登录的内容。登录的代码是-
$interval(function(){
var token = $cookies.get('token');
if(token === undefined){
$rootScope.$hide = false;
}
else{
$rootScope.$hide = true;
}
}, 300)
间隔函数检查从后端(django)发送的 token 的cookie并切换 View 。如果有 token ,则显示主要内容,如果没有,则加载登录指令。
要注销,我要做的就是删除这些 cookie 并将它们设置为 null,这会自动将 View 更改回登录指令。
注销后,页面切换到登录。
问题-
当我尝试使用不同的用户登录时,在后端,用户会切换,但一旦 View 更改为主要内容,它就会加载前一个用户的数据,直到刷新整个页面(手动)。
- 我似乎不明白为什么当 ng-if 重新创建整个 DOM 时,它不应该加载新数据吗?
- 如果没有,如何加载新数据?
最佳答案
据我所知,问题不在于 ng-if
。当您清除 token 时,您还应该清除用于填充 DOM 的用户对象。现在有两个依赖项 - cookie 和用户对象。
删除 token 时,请确保清除用户对象。如果 ng-if
仅依赖于您的 token ,则意味着在您的登录和用户对象填充之间的间隙,旧的用户对象仍然有效,并且 $hide
将为 false,从而显示您的旧用户数据
关于javascript - AngularJS 注销和重新登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39670301/