我正在构建一个不在根位置的AngularJS应用程序domain.tld/blog.我有/blog基础上的所有东西的路由设置.我在页面的头部包含了基本标记<base href="/blog">.html5Mode设置为true.在应用程序内,一切都按预期工作.但是,当我单击基本位置之外的非角度URL时,不会加载页面.似乎这个位置被otherwise路由器中的功能捕获:
ROUTER.otherwise({
redirectTo : '/blog'
});
Run Code Online (Sandbox Code Playgroud)
所以当我点击任何网址时,即domain.tld/somewhere-else它会重定向到domain.tld/blog.显然,这是您所期望的:对于路由器中找不到的每个URL,将其重定向到"主页".在我的应用程序中,这不是理想的行为.所有不在路由器中的网址都应被视为普通网址,并将网页重新加载到该网址.
所以我需要的是这样的:
ROUTER.otherwise(
window.location = theRequestedUrl;
);
Run Code Online (Sandbox Code Playgroud)
这显然不起作用.但不知何故,我需要进入路由器的其他部分并告诉它重定向到页面重新加载页面.
以下问题是相关的:角度路由奇怪的事情发生
以下jsFiddle演示了这个问题(感谢@rdjs!)http://fiddle.jshell.net/43tub/6/show/light/.点击/outside链接应该做整页刷新...
根据Angular 文档
在如下情况下,链接不会被重写; 相反,浏览器将执行整页重新加载到原始链接.
- 包含目标元素的链接
示例:<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>
看看这对你有帮助
查看代码,基础是"/ blog /"而不是"/ blog"看起来很重要.一旦我改变了,我就可以相对地引用链接:
<a href="./Book/Moby">Moby</a> |
<a href="./Book/Gatsby">Gatsby</a> |
<a href=".">base root</a> |
<a href="/Outside">Outside</a> | // gets a nice 404
Run Code Online (Sandbox Code Playgroud)
我的jsfiddle,请注意,location.pathname始终设置为"[path] /",这也适用于编辑时硬编码/ _display /,但jsfiddle在运行编辑和保存小提琴时_display /和workingdir/show /之间切换.
| 归档时间: |
|
| 查看次数: |
5083 次 |
| 最近记录: |