带有HTML5模式的Angularjs普通链接

带有HTML5模式的Angularjs普通链接,angularjs,Angularjs,我正在HTML5模式下使用angularjs。它似乎控制了页面上的所有href。但是,如果我想在应用程序的同一个域中有一个链接,但实际上不在应用程序中,该怎么办。例如pdf 如果我这样做,angular将尝试使用HTML5模式并使用路由提供程序来确定应该加载哪个视图。但实际上我希望浏览器以正常方式进入该页面 要做到这一点,唯一的方法是与路由提供程序制定规则,并将该规则重定向到具有window.location的正确页面?如果您不想控制href。将目标属性放置在链接上 因此PDF将绕过HTML5模

我正在HTML5模式下使用angularjs。它似乎控制了页面上的所有href。但是,如果我想在应用程序的同一个域中有一个链接,但实际上不在应用程序中,该怎么办。例如pdf

如果我这样做,angular将尝试使用HTML5模式并使用路由提供程序来确定应该加载哪个视图。但实际上我希望浏览器以正常方式进入该页面


要做到这一点,唯一的方法是与路由提供程序制定规则,并将该规则重定向到具有window.location的正确页面?

如果您不想控制href。将目标属性放置在链接上


因此PDF将绕过HTML5模式,routeProvider和浏览器将直接转到该url。

在HTML5模式下,有三种情况下A标记不会被重写: 从

  • 包含
    target
    属性的链接。示例:
  • 指向不同域的绝对链接
    示例:
  • 当定义了
    base
    时,以“/”开头的链接指向不同的基本路径
    示例:

所以你的情况是1。添加
target=“\u self”
其他解决方案。所有链接将正常工作(重新加载页面)。由
ng href=“/path”
标记的链接将在pushState上播放。小JS黑客帮助它

.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);
}])

从Angular v1.3.0开始,位置提供程序有一个新的配置选项。这将关闭“劫持”页面上的所有链接:

module.config(function ($locationProvider) {
    $locationProvider.html5Mode({
        enabled: true,
        rewriteLinks: false
    });
});

虽然对所有链接禁用此行为可能不是您的意图,但我为其他人发布此消息,他们和我一样,希望在html5模式下使用
$location
,仅更改URL而不影响所有链接。

+1。Eduard Gamonal的答案是最完整的,但这显然似乎是对目标标签使用的一个巨大变化,并且与我的团队计划引入另一个团队维护的共享标题的情况特别相关。既然这是一个.config,那么这不是只运行一次吗?也就是说,如果您有多个包含内容的虚拟页面,那么这似乎只会扫描DOM中当前的条目,而不会扫描稍后作为URL路径一部分获取的条目。这是一个多么奇怪的修复,但非常感谢!我认为Angular应该提供一种更漂亮的方式来表示这一点……这不是解决办法。原因是
A
作为指令处理。