我正在html 5模式下使用angularjs。似乎可以控制页面上的所有href。但是,如果我想链接到该应用程序同一域中但实际上不在该应用程序中的内容,该怎么办?一个示例是pdf。
如果我做的<a href="https://stackoverflow.com/pdfurl">
角度会尝试使用html5mode并使用路由提供程序来确定应加载哪个视图。但是我实际上希望浏览器以常规方式转到该页面。
唯一的方法是与路由提供者制定规则,并使用window.location将其重定向到正确的页面吗?
我正在html 5模式下使用angularjs。似乎可以控制页面上的所有href。但是,如果我想链接到该应用程序同一域中但实际上不在该应用程序中的内容,该怎么办?一个示例是pdf。
如果我做的<a href="https://stackoverflow.com/pdfurl">
角度会尝试使用html5mode并使用路由提供程序来确定应加载哪个视图。但是我实际上希望浏览器以常规方式转到该页面。
唯一的方法是与路由提供者制定规则,并使用window.location将其重定向到正确的页面吗?
Answers:
在HTML5模式,存在其中A标记不被改写三种情况:从角文档
target
属性的链接。例:<a href="https://stackoverflow.com/ext/link?a=b" target="_self">link</a>
Example: <a href="http://angularjs.org/">link</a>
base
定义时导致不同的基本路径Example: <a href="https://stackoverflow.com/not-my-base/link">link</a>
所以你的情况是1.添加 target="_self"
A
其作为指令处理。
从Angular v1.3.0开始rewriteLinks
,位置提供程序有一个新的配置选项。这将关闭“劫持”页面上的所有链接:
module.config(function ($locationProvider) {
$locationProvider.html5Mode({
enabled: true,
rewriteLinks: false
});
});
尽管对所有链接都禁止这种行为可能不是您的意图,但我向其他人发布了此信息,这些人像我一样,只想$location
在html5模式下使用以更改URL而不影响所有链接。
如果您不希望Angular控制href。在链接上放置目标属性。
因此,PDF将通过html5mode和routeProvider传递,浏览器将直接转到该URL。
其他解决方案。所有链接将正常工作(重新加载页面)。标ng-href="https://stackoverflow.com/path"
有的链接将在pushState上播放。小型JS hack帮助。
.config(["$locationProvider", function($locationProvider) {
// hack for html5Mode customization
$('a').each(function(){
$a = $(this);
if ($a.is('[target]') || $a.is('[ng-href]')){
} else {
$a.attr('target', '_self');
}
});
$locationProvider.html5Mode(true);
}])