Angular App中的外部链接

时间:2013-05-26 00:49:01

标签: angularjs angular-routing

我正在将Angular合并到现有rails应用程序的单个页面中。

使用以下

,一切都与页面内的路由完美配合
app.config(function($routeProvider, $locationProvider) {
    $routeProvider
      .when('/services/:id', {
        templateUrl: "/javascripts/angular/templates/service_ui/service.html",
        controller: "ServiceCtrl"
     })

     $locationProvider.html5Mode(true);
});

但是,我想维护与Angular无关的链接的正常功能。例如,我们在标题中有许多链接,这些链接链接到其他地方,现在被角度路由器捕获。

我在https://groups.google.com/forum/?fromgroups#!topic/angular/basidvjscRk

找到了一些可能的解决方案

但基本路径方法似乎不起作用..而target =“_ self”方法相当突兀。是否有更好的方法让angular忽略未在config函数中指定的路由?

我知道有一个.otherwise()方法,但这看起来像是一个黑客。我错过了什么吗?

非常感谢!

2 个答案:

答案 0 :(得分:8)

我们有一个相对“传统”的Web应用程序,因为大多数链接会触发整页重新加载;很少有链接通过Angular的路由系统。在我们的模块定义之后,我们有以下内容:

app.run(function($location, $rootElement) {
  $rootElement.off('click');
});

这会停止Angular用来操作网址的built-in interception of clicks等等,当您点击链接时;问题是你现在必须手动使用$location,只要你希望Angular 执行其URL魔术(例如通过ngClick和操作$location的函数相应地)。

您可以考虑使用$rootElement.off结合特殊指令或配置函数,在您检测到的链接上重新安装此行为包含某个URL片段。

答案 1 :(得分:0)

可能对您有用的另一个选项是更改$rootElement:链接拦截仅发生在声明为ng-app的元素中。

就我而言,我从<body ng-app="myApp">切换到<section id="my-rich-area" ng-app="myApp">

这对我有用,因为我在该部分中没有任何相同域,非角度的链接,ymmv。