Play Framework 2.1 - AngularJS路由 - 最佳解决方案?

Dom*_*mra 32 scala playframework angularjs

我正在通过AngularJS教程.Angular使用它自己的JS路由机制来允许单页应用程序.Angular的示例路由文件如下所示:

angular.module('phonecat', []).
  config(['$routeProvider', function($routeProvider) {
  $routeProvider.
      when('/phones', {templateUrl: '/partials/phone-list',   controller: PhoneListCtrl}).
      when('/phones/:phoneId', {templateUrl: 'partials/phone-detail', controller: PhoneDetailCtrl}).
      otherwise({redirectTo: '/phones'});
}]);
Run Code Online (Sandbox Code Playgroud)

我试图找到一个存储我的部分(Angular特定HTML文件)的好地方.理想情况下,我喜欢在Play中模拟它们的能力(即将它们作为*.scala.html文件).我可以使用如下的播放路径文件来完成此操作:

GET     /partials/phone_index       controllers.Application.phone_index
Run Code Online (Sandbox Code Playgroud)

我基本上偏爱/像这样的控制器动作:

def phone_index = Action {
  Ok(views.html.partials.phone_index())
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的解决方案是两个理想的组合:

  1. 我会有一些映射,让我访问/ partial/*下的任何文件,并获取部分文件.
  2. 我想的路线的重写到一个特定的部分,所以我的CAN用控制器动作用数据(罕见)动态地继续进行.

有任何想法吗?

Per*_*ega 31

当我尝试类似的东西时,我得出的结论是,最好将其分为两部分:

  • 使用Play作为通过Ajax调用进行交互的后端
  • 将Angular模板存储在Play public文件夹(类似/public/angular/)中,并使用默认的AngularJs方式映射模板

我知道这听起来不太好,并且真的没有回答你关于如何做到这一点的问题,但是由于模板和它们的URL在Angular中的映射方式,尝试链接两个框架可能会有问题,并且它的好处将非常大因为任何改变都意味着很多工作,因此消除了Play和Angular的快速发展的主要好处.

这也允许您更好地分离关注点,如果您的项目增长可能很重要,因为您可以将AngularJS代码作为连接到后端的独立应用程序取消,它将正常工作.

您可以在此Github存储库中看到我所说的示例代码(基于AngularJS的TODO教程).我警告你,代码不太好,但应该给你一个想法,作为奖励向你展示如何将Jasmine整合到Play中,用于AngularJS单元测试.

  • 我想这可能是我需要采用的方法. (2认同)