当预期页面重新加载时,AngularJS路由劫持非基本URL

Div*_*ero 9 routing angularjs

我正在构建一个不在根位置的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链接应该做整页刷新...

Cha*_*ani 9

根据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>

看看这对你有帮助

  • 谢谢您的回答.不过我已经试过了.使用目标元素对我来说是一个可接受的解决方案.以''/'开头的链接不会**按预期/文档工作.这正是我需要的,但它只是根本不起作用...... (2认同)

los*_*der 5

查看代码,基础是"/ 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 /之间切换.

  • 事实上,丢失的尾随斜线是问题所在!我没有抓住这个,因为尾部斜杠会导致冲突库中的大量错误,这使我认为它不应该有一个尾部斜杠.在使用respond.js库整理出所有错误之后(我删除了静态主机的代理并为IE8及以下使用额外的条件CSS ...)我使用它按预期工作! (2认同)