3

我正在将 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" 方法相当突兀。有没有更好的方法让角度忽略配置函数中未指定的路由?

我知道有一个 .otherwise() 方法,但这似乎又是一个 hack。我错过了什么吗?

非常感谢!

4

2 回答 2

8

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

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

当你点击一个链接时,这会阻止Angular 用来操纵 URL的内置点击拦截;$location问题是,当您希望 Angular 执行其 URL 魔术时,您现在必须手动使用(例如,通过一个和ngClick一个相应操作的函数$location)。

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

于 2013-05-26T05:54:49.293 回答
0

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

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

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

于 2015-10-14T19:02:55.820 回答