Play Framework 2.1.0和AngularJS Integration

use*_*484 6 playframework playframework-2.0 angularjs

1)我想将AngularJS与Play Framework 2.1.0结合使用,将Play服务JSON内容作为RESTful服务器后端,它从版本1.x迁移到2.x后出现,无法为静态HTML服务内容来自使用以下方法的Public文件夹:

Routes.conf:

GET     /                           staticFile:/public/index.html
Run Code Online (Sandbox Code Playgroud)

这导致Controller方法调用预期异常被引发.

我发现在Play 2.1.0中工作的一种方法是在Controller中编写一个Action方法,如下所示:

public static Result index() {
    return ok(Play.application().getFile("public/index.html"));
}
Run Code Online (Sandbox Code Playgroud)

这是最好的方法还是有更优雅和功能性的解决方案?

2)在使用客户端JavaScript框架而不是基于Scala的模板引擎的方法中是否存在任何潜在的缺点或"陷阱"?

任何指针都将非常感激.

Lee*_*rus 5

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

GET         /                               controllers.Application.index
GET         /assets/*file                   controllers.Assets.at(path="/public", file)
Run Code Online (Sandbox Code Playgroud)

Play控制器看起来像:

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

这允许您使用Plays模板进行资源导入(它也可以很好地与WebJars一起使用).例如在你的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>
Run Code Online (Sandbox Code Playgroud)

然后,您可以将所有部分放在公共目录中并将它们作为静态文件提供,这些可以从您的app.js中引用,如下所示:

      when('/partial-1', {templateUrl: '/assets/partials/partial-1.html',   controller: CtrlPartial1}).
Run Code Online (Sandbox Code Playgroud)


and*_*lla 2

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

GET   /view/*file      controllers.Assets.at(path="/public/angular", file)
Run Code Online (Sandbox Code Playgroud)

此外,我想说,即使它是静态的,您也可能希望在将来动态生成一些数据。因此,您可以做的很简单,将 HTML 文件创建为经典模板,比方说:ang/index.scala.html. 然后你的路线和控制器将如下所示:

路线:

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

控制器:

public static Result index() {
  return ok(views.html.ang.index(/*some data here?*/));
}
Run Code Online (Sandbox Code Playgroud)

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