【问题标题】:AngularJS - How to get serverside and clientside routing to work togetherAngularJS - 如何让服务器端和客户端路由一起工作
【发布时间】:2014-08-15 19:54:01
【问题描述】:

我正在将项目移植到基于角度的 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,它似乎没有联系服务器。

【问题讨论】:

  • 如何导航到 someOtherPage?是<a href="/someOtherPage"> 标签吗?
  • $location guide 的“Html 链接重写”部分可能会有所帮助。
  • 听起来它可以解决问题,但是我无法让它正常工作(我会再弄一些,但如果有更多的参考资料将不胜感激)

标签: javascript node.js angularjs routes locomotivejs


【解决方案1】:

因为您使用的是 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>

【讨论】:

    猜你喜欢
    • 2015-04-17
    • 2018-02-05
    • 2016-08-06
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2014-02-23
    • 2016-09-24
    • 2017-04-08
    相关资源
    最近更新 更多