Angularjs 角度重新加载当前管线并重新加载当前模板

Angularjs 角度重新加载当前管线并重新加载当前模板,angularjs,Angularjs,当用户访问未经授权的私人页面时,例如配置文件,my backend 302将重定向到控制器操作,该控制器操作提供登录部分而不是配置文件部分。由于它302重定向到返回部分的操作,因此url地址栏不会从用户试图访问的页面(“/profile”)更改 我本来打算“修复”这个问题,但实际上我认为它提供了良好的用户体验,而不是将返回URL作为查询参数处理 想法是,一旦他们登录,我只想重新加载当前路径,即通过“/profile”对profile partial执行GET请求,并将其切换回,而不是登录part

当用户访问未经授权的私人页面时,例如配置文件,my backend 302将重定向到控制器操作,该控制器操作提供登录部分而不是配置文件部分。由于它302重定向到返回部分的操作,因此url地址栏不会从用户试图访问的页面(“/profile”)更改

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

想法是,一旦他们登录,我只想重新加载当前路径,即通过“/profile”对profile partial执行GET请求,并将其切换回,而不是登录partial

然而,我无法让这个“重新加载当前路线”工作。我尝试了以下所有方法:

$location.$$compose();
$location.absUrl($location.path());
$location.url($location.path());
$location.path($location.path())
$route.reload();
但都不管用$route.reload()似乎是确定的方法,但它也不起作用。它经历路由循环,重新实例化控制器,但不执行重新加载模板的GET请求

唯一有效的方法是通过
location.reload()
进行硬刷新,但这并不理想


如何强制angular为当前路由重新加载模板?

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

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

如果这是您想要遵循的方式,那么您需要删除 调用重载之前从$templateCache中删除模板

这对我来说很有效,因为登录模板实际上被缓存为用户试图访问的模板。因此,移除它并让angular重新获取当前路线的正确路径就像一个符咒

var currentPageTemplate = $route.current.templateUrl;
$templateCache.remove(currentPageTemplate);
$route.reload();

我注意到,
$route.reload()
方法会重新实例化在
$routeProvider.when(“/someUrl”,{controller:'SomeController',templateUrl:'SomeView.html'))上设置的所有内容。
模板、控制器和/或在
.when()方法中传递的任何已解析承诺


因此,;当您构建应用程序时,如果您想要
$route.reload()
重新加载所有页面并重新实例化控制器,您必须将所有内容放在
容器下,并在templateUrl文件中包含任何菜单或页脚。

您尝试过$location.path('mypath')吗?我不明白您的意思,$location.path是一个函数。我无法设置它,从引用路径(path)抛出错误此方法是getter/setter我没有任何问题,比如$location.path('/post/index');如果它在同一条路线上工作,我唯一能想到的是。不工作:(你认为这是一个bug(在$route.reload()中)我真的不知道^^考虑到你没有比赛(你想重新加载拒绝加载的电流ie)