Playframework Play Framework 2.1.0和;AngularJS集成

Playframework Play Framework 2.1.0和;AngularJS集成,playframework,angularjs,playframework-2.0,Playframework,Angularjs,Playframework 2.0,1) 我想在Play Framework 2.1.0中使用AngularJS,Play将JSON内容作为RESTful服务器后端提供,从1.x版迁移到2.x版后,似乎无法使用以下方法从公用文件夹中提供静态HTML内容: Routes.conf: GET / staticFile:/public/index.html 这导致引发控制器方法调用预期的异常 我发现在Play 2.1.0中工作的一种方法是在控制器中编写动作方法,如下所示: p

1) 我想在Play Framework 2.1.0中使用AngularJS,Play将JSON内容作为RESTful服务器后端提供,从1.x版迁移到2.x版后,似乎无法使用以下方法从公用文件夹中提供静态HTML内容:

Routes.conf:

GET     /                           staticFile:/public/index.html
这导致引发控制器方法调用预期的异常

我发现在Play 2.1.0中工作的一种方法是在控制器中编写动作方法,如下所示:

public static Result index() {
    return ok(Play.application().getFile("public/index.html"));
}
这是最好的方法还是有更优雅、更实用的解决方案

2) 这种使用客户端JavaScript框架而不是基于Scala的模板引擎的方法是否有任何潜在的缺点或“缺陷”


任何指针都将不胜感激。

当文件位于
公共
文件夹中时,您只需使用
/assets/*
URL访问它们即可。你也可以这样做:

GET   /view/*file      controllers.Assets.at(path="/public/angular", file)
更糟糕的是,我想说,即使它是静态的,您也可能希望在将来动态生成一些数据。 因此,您可以简单地将HTML文件创建为经典模板,比如:
ang/index.scala.HTML
。然后,您的路线和控制器将如下所示:

路线:

控制器:


我喜欢使用客户端视图来处理客户端生成的内容,使用服务器端视图来准备字段,注入整个应用程序生命周期中应使用的所有相关数据。

使用角度路由时,一种方法是使用Play为索引页提供服务,并将部分作为公共目录中的静态资源提供服务。
路由
文件将包含以下内容:

GET         /                               controllers.Application.index
GET         /assets/*file                   controllers.Assets.at(path="/public", file)
播放控制器看起来像:

  def index = Action {
     Ok(views.html.index())
  }
这允许您使用Plays模板来进行资源导入(它也可以很好地用于)。例如,在
index.scala.html
中:

 <script src="@routes.Assets.at("javascripts/app.js")" type="text/javascript"></script>
 <script type='text/javascript' src='@routes.WebJarAssets.at(WebJarAssets.locate("angular.min.js"))'></script>
最终的seed()完美地服务于
public
文件夹中的静态HTML页面,同时使Play
路由
脚本文件几乎完好无损


seed尽可能少地使用Play Scala模板,以便为HTML中的AngularJS指令腾出空间。

为什么会失败?它不应该。。。
  def index = Action {
     Ok(views.html.index())
  }
 <script src="@routes.Assets.at("javascripts/app.js")" type="text/javascript"></script>
 <script type='text/javascript' src='@routes.WebJarAssets.at(WebJarAssets.locate("angular.min.js"))'></script>
      when('/partial-1', {templateUrl: '/assets/partials/partial-1.html',   controller: CtrlPartial1}).