一尘不染

Angular重新加载当前路线并重新加载当前模板

angularjs

当用户访问未经授权的个人页面(例如个人资料)时,我的后端302重定向到控制器操作,该操作代替部分个人资料来提供登录部分。由于它302重定向到返回部分操作的动作,因此URL地址栏与用户尝试访问的页面(“
/ profile”)没有变化。

我本来打算“修复”该问题,但实际上我认为它可以提供良好的用户体验,而不是将返回网址作为查询参数来处理。

想法是一旦他们登录,我只想重新加载当前路由,也可以通过“ / profile”对配置文件部分执行GET请求,然后将其切换回而不是登录部分。

但是,我无法使“重新加载当前路线”正常工作。我尝试了以下所有方法:

$location.$$compose();
$location.absUrl($location.path());
$location.url($location.path());
$location.path($location.path())
$route.reload();

但是没有任何作用。$ route.reload()似乎是确定的方法,但它也不起作用。它经历了路由周期,重新实例化了控制器,但不执行GET请求来重新加载模板

唯一有效的方法是强制刷新,location.reload()但这并不理想。

如何强制angular重新加载当前路线的模板?


阅读 236

收藏
2020-07-04

共1个答案

一尘不染

好的,我在Github上找到了lgalfaso提供的解决方案(精确粘贴):

模板被缓存,如果用户没有进入页面的权限,则此检查应在到达控制器之前或之后在控制器内进行,而不是在模板检索上进行

如果这是您要遵循的方式,则需要在调用reload之前从$ templateCache中删除模板。

这样对我有用,因为登录模板实际上被缓存为用户尝试访问的模板。因此,将其删除并让角度重新获取当前路线的正确路线就像一种魅力。

var currentPageTemplate = $route.current.templateUrl;
$templateCache.remove(currentPageTemplate);
$route.reload();
2020-07-04