AngularJS - 如何在整个页面加载时进行重定向?

Posted

技术标签:

【中文标题】AngularJS - 如何在整个页面加载时进行重定向?【英文标题】:AngularJS - How can I do a redirect with a full page load? 【发布时间】:2013-04-06 20:20:26 【问题描述】:

我想做一个重新加载整个页面的重定向,以便在页面加载时刷新来自我的网络服务器的 cookie。 window.location = "/#/Next"window.location.href = "/#/Next" 不起作用,它们执行的 Angular 路由不会命中服务器。

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

【问题讨论】:

你解决过这个问题吗? 你解决过这个问题吗? 你解决过这个问题吗? 你解决过这个问题吗? 你解决过这个问题吗? 【参考方案1】:

对于<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

见:

https://docs.angularjs.org/guide/$location https://docs.angularjs.org/api/ng/service/$location

【讨论】:

$window.location.href 的作用与 window.location.href 的作用相同。我很确定 $window 只是窗口的包装服务。无论哪种方式,都执行 Angular 路由而不是整页刷新。 $window.location.href 肯定会导致整页刷新,我正在我的应用程序中这样做。 我读过同样的东西。不适用于当前版本的 Chrome。它执行 Angular 路由。 来自 CDN 的 1.0.6。我在 $http.post 成功回调中执行此操作,如果这很重要,尽管我已经在回调之外尝试过它并获得了相同的结果。如果我重定向到“/”(我也定义了一个 Angular 路由),它适用于整个页面刷新,但“/#/Next”只会改变视图。 <a href="..." target="_self"> 对我有用。谢谢!【参考方案2】:

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

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

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

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

    那么您应该将 URL 设置为:

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

    (前面还有'/')。

    低级分配新的目标网址:$window.location.href = destinationUrl;

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

【讨论】:

这在 Angular 1.3.1 和 Chrome 38 中对我不起作用。当我分配路径或完整 URL 时,$window.location.href 的值不会改变。只有 $window.location.assign() 对我有用。 遇到和Felix一样的问题,用不同的方式解决了***.com/questions/31137809/…【参考方案3】:

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

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

然后重新加载

$window.location.reload();

【讨论】:

这似乎可以解决问题,但是在浏览器上单击后退和前进会导致很多不一致。【参考方案4】:

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

  $scope.openPage = function (pageName) 
      window.location = '#/html/pages/' + pageName;
      window.location.reload();
  ;

【讨论】:

【参考方案5】:

试试这个

$window.location.href="#page-name";
$window.location.reload();

【讨论】:

以上是关于AngularJS - 如何在整个页面加载时进行重定向?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用AngularJS重新加载或渲染整个页面

使用AngularJS中的UI-Router将状态重定向到默认子状态

如何在页面加载时执行 AngularJS 控制器功能?

加载 angularjs 视图后加载 jquery 模块?

如何在 angularJS 中交换视图?

使用 AngularJS 中的 UI-Router 将状态重定向到默认子状态