当用户访问未经授权的个人页面(例如个人资料)时,我的后端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()但这并不理想。
location.reload()
如何强制angular重新加载当前路线的模板?
好的,我在Github上找到了lgalfaso提供的解决方案(精确粘贴):
模板被缓存,如果用户没有进入页面的权限,则此检查应在到达控制器之前或之后在控制器内进行,而不是在模板检索上进行 如果这是您要遵循的方式,则需要在调用reload之前从$ templateCache中删除模板。
模板被缓存,如果用户没有进入页面的权限,则此检查应在到达控制器之前或之后在控制器内进行,而不是在模板检索上进行
如果这是您要遵循的方式,则需要在调用reload之前从$ templateCache中删除模板。
这样对我有用,因为登录模板实际上被缓存为用户尝试访问的模板。因此,将其删除并让角度重新获取当前路线的正确路线就像一种魅力。
var currentPageTemplate = $route.current.templateUrl; $templateCache.remove(currentPageTemplate); $route.reload();