2

我正在将项目移植到基于角度的 SPA。它目前是一个更“传统”的 node/locomotivejs 应用程序,它从服务器端提供模板(从来不知道这个的正确术语)。

项目太大而无法一次全部迁移,因此我们一次将其转换为有角度的页面。

我的问题:如果您加载应用程序的角度部分,一切正常。您可以正确地进入角度路线。但是,如果您随后转到非角度路线(应该在服务器端处理),则不会加载任何内容(ng-view 变为空白,而不是加载一个全新的模板)。如果您首先转到服务器端路由或点击刷新,则页面会正确加载。

我的猜测是 angular 正在尝试处理这些路由,我不确定如何让它让服务器接管。

app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
  $locationProvider.html5Mode(true);
  $routeProvider.when('/something/page1', {
    templateUrl: '/page1.html',
    controller: 'page1Ctrl'
  });
  $routeProvider.when('/something/page1/subpage', {
    templateUrl: '/subpage.html',
    controller: 'subpageCtrl'
  });
}]);

这是我的角度路线提供者。没有指定“否则”。服务器端我有类似的东西:

this.match( '/someOtherPage', 'someOtherPage#showstuff');

如果我直接转到 /someOtherPage,它会从服务器端正确加载。如果我转到/something/page1,然后转到/someOtherPage,它似乎没有联系服务器。

4

1 回答 1

8

因为您使用的是 Angular html 5 模式,所以 Angular 无法区分您希望 Angular 处理的路线与您不想处理的路线之间的区别。我认为您需要告诉 Angular 忽略某些路线。看起来这是您正在寻找的内容:

https://docs.angularjs.org/guide/$location#html-link-rewriting

因此,将您的链接更改为非角度页面以使用target.

前任。<a href="/ext/link?a=b" target="_self">link</a>

于 2014-08-18T22:36:50.243 回答