使用角度路由和往返路由

Nat*_*Nat 5 url-routing angularjs

我正在开发一个Django应用程序,它在某些页面中大量使用Angular,例如在domain.com/myAngularApp

在角度页面中,我使用Angular路由在该页面内的不同视图/状态之间导航.但是在整个网站上都有导航链接,这些链接需要导致对Django的往返请求.但是,所有页面都包含相同的已编译的javascript文件,其中包含Angular路由声明.

所以我的问题是:如何让Angular管理自己的路由,并在位置发生变化时(主要是通过点击页面上的链接)转移到未明确告知其拥有的路径,即到域外的不同子目录.

我的路由声明看起来像:

myApp.config( function($locationProvider, $routeProvider) {
  $locationProvider.html5Mode(true);
  $routeProvider.when('/myAngularApp/', {
    templateURL: 'template1.html'
  });
  $routeProvider.when('/myAngularApp/stuff', {
    templateURL: 'template12.html'
  });
  $routeProvider.otherwise({redirectTo:  <not sure what to do here...>  });
})
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西:

$routeProvider.otherwise({redirectTo: function(a1,r,a3){ window.location.href = r }})
Run Code Online (Sandbox Code Playgroud)

但这会使页面在任何不匹配的路由上无休止地刷新.

抛弃其他声明似乎使得在直接访问时不可能留下具有不匹配路由的页面...不明白为什么?

必须有可能做我想做的事吗?

kri*_*ian 4

我想我可能已经找到了解决方案。我正在做类似的事情,一个多页面角度网站,其中一些页面使用角度。这就是我正在做的

var app = angular.module('appname', ['ui.bootstrap', 'ui.autocomplete'])
.config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) {
    $locationProvider.html5Mode(true);
    $locationProvider.hashPrefix('!');
}])
.run(function($rootScope, $location) {
    var redirected = false;
    $rootScope.$on('$locationChangeStart', function(event, nextLocation, currentLocation) {
        if(!redirected &&  $location.path() !== '/current-url') {
            redirected = true;
            event.preventDefault();
            window.location = $location.path();
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

所以接下来我要解决的是如何传入current-url路径。我想到的一种方法是使用 ng-init 在视图中设置该数据(我使用的是express.js,所以我会使用 Jade)。或者可能在运行函数中获取初始路径并对其进行测试。

event.preventDefault() 用于阻止将额外的项目添加到浏览器历史记录中。在此之前,我必须回击两次才能返回到有角度的页面。

注意尚未在 IE8 上进行测试。我现在就这么做,看看效果如何。

更新好的,我刚刚在 IE8 中测试了这个,我陷入了重定向循环。我已经更新了代码以添加一个简单的变量来检查我们是否已重定向。似乎有效。我很想知道一种更漂亮的方式。