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 - 如何在整个页面加载时进行重定向?的主要内容,如果未能解决你的问题,请参考以下文章