我正在将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()方法,但这看起来像是一个黑客。我错过了什么吗?
非常感谢!
答案 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。