【问题标题】:Angular reload current route and reload the current template角度重新加载当前路线并重新加载当前模板
【发布时间】:2014-02-16 21:13:52
【问题描述】:

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

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

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

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

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

但没有一个工作。 $route.reload() 似乎是确定的方式,但它也不起作用。它通过路由循环,重新实例化控制器,但不执行 GET 请求以重新加载模板

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

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

【问题讨论】:

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

标签: angularjs


【解决方案1】:

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

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

如果这是您想要遵循的方式,那么您需要删除 调用 reload 之前来自 $templateCache 的模板

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-12
      • 2023-03-04
      • 2019-08-26
      • 2013-03-19
      • 1970-01-01
      • 2017-05-18
      • 2016-10-20
      • 2014-02-24
      • 2019-02-22
      相关资源
      最近更新 更多