AngularJS - 如何让服务器端和客户端路由协同工作

时间:2014-08-15 19:54:01

标签: javascript node.js angularjs routes locomotivejs

我正致力于将项目移植到基于角度的SPA。它目前是一个更传统的" node / locomotivejs app,它从服务器端提供模板(从来不知道适当的术语)。

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

我的问题:如果您加载应用程序的角度部分,一切正常。你可以正确地去角度路线。但是,如果您转到非角度路径(应该在服务器端处理),则不会加载任何内容(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'
  });
}]);
这是我的角度路线提供者。否#34;否则"指定。 Serverside我有类似的东西:

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

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

1 个答案:

答案 0 :(得分:8)

因为你正在使用角度html 5模式角度不能分辨你想要角度处理的路线和你不想要的路线之间的区别。我认为你需要告诉angular忽略某些路线。看起来这就是你要找的东西:

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

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

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