93

我想做一个重新加载整个页面的重定向,以便在页面加载时刷新来自我的 Web 服务器的 cookie。window.location = "/#/Next"并且window.location.href = "/#/Next"不工作,他们做了一个不会击中服务器的 Angular 路由。

在 Angular 控制器中发出完整服务器请求的正确方法是什么?

4

5 回答 5

184

对于<a>标签

你需要贴上target="_self"你的<a>标签

AngularJS 会在三种情况下执行完整的页面重新加载:

  • 包含目标元素的链接
    示例:<a href="/ext/link?a=b" target="_self">link</a>
  • 指向不同域的绝对链接
    示例:<a href="http://angularjs.org/">link</a>
  • 以“/”开头的链接在定义 base 时指向不同的基本路径
    示例:<a href="/not-my-base/link">link</a>

使用 javascript

$location服务只允许您更改 URL;它不允许您重新加载页面。当您需要更改 URL 并重新加载页面或导航到不同的页面时,请使用较低级别的 API $window.location.href:.

看:

于 2013-04-14T18:54:01.187 回答
33

我们遇到了同样的问题,使用 JS 代码(即不是来自 HTML 锚)。这就是我们解决这个问题的方法:

  1. 如果需要,可以通过服务虚拟更改当前 URL 。$location如果您的目标只是当前 URL 的变体,这可能很有用,以便您可以利用$location辅助方法。例如,我们运行$location.search(..., ...)只是更改查询字符串参数的值。

  2. 建立新的目标 URL,$location.url()如果需要,使用当前的。为了工作,这个新的必须包括架构、域和端口之后的所有内容。因此,例如,如果您想搬到:

    http://yourdomain.com/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en

    那么您应该将 URL 设置为:

    var destinationUrl = '/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en';

    (与领先'/'以及)。

  3. 在低级分配新的目标 URL :$window.location.href = destinationUrl;

  4. 强制重新加载,仍然处于低级别:$window.location.reload();

于 2013-11-13T10:58:47.137 回答
13

在搜索并提供命中和试用会话后,我可以通过首先指定 url 来解决它

$window.location.href = '/#/home/stats';

然后重新加载

$window.location.reload();
于 2016-07-01T10:19:31.167 回答
9

我遇到过同样的问题。当我使用window.location时,$window.location甚至<a href="..." target="_self">路由都不刷新页面。所以使用了缓存的服务,这不是我在我的应用程序中想要的。我通过添加window.location.reload()afterwindow.location来解决它,以强制页面在路由后重新加载。这种方法似乎加载了两次页面。可能是一个肮脏的把戏,但它确实有效。这就是我现在的样子:

  $scope.openPage = function (pageName) {
      window.location = '#/html/pages/' + pageName;
      window.location.reload();
  };
于 2015-06-07T09:39:30.697 回答
1

尝试这个

$window.location.href="#page-name";
$window.location.reload();
于 2018-06-22T12:16:41.733 回答