2013-04-02 19 views
6

1)Play Framework 2.1.0でAngularJSを使用したいと思います.PlayがJSONコンテンツをRESTfulなサーバーバックエンドとして提供していますが、これはバージョン1.xからPlay Framework 2.1.0とAngularJSの統合

Routes.conf::これはコントローラのメソッド呼び出しになり

GET /       staticFile:/public/index.html 

例外が発生している期待のパブリックフォルダは、以下のアプローチを使用して言うから2.xでは、それは、サーバーの静的なHTMLコンテンツには不可能です。

プレイ2.1.0で動作し、私が発見した一つの方法は、以下のようなコントローラにアクションメソッドを書いている:

public static Result index() { 
    return ok(Play.application().getFile("public/index.html")); 
} 

この最善のアプローチです以上のエレガントで機能的な解決策がありますこれに?

2)Scalaベースのテンプレートエンジンではなく、ビュー用にクライアント側のJavaScriptフレームワークを使用するというようなアプローチでは、潜在的な弱点や「落とし穴」はありますか?

いずれのポインタも大歓迎です。

+0

なぜ失敗するのですか?それは...べきではない –

答えて

2

ファイルがpublicフォルダにある場合は、/assets/*のURLを使用してファイルにアクセスできます。また、そのようなことを行うことができます:

GET /view/*file  controllers.Assets.at(path="/public/angular", file) 

Morover、私はそれが静的である場合でも、あなたが将来的に動的にいくつかのデータを生成することができることを言うと思います。 これでできることは、HTMLファイルを古典的なテンプレートとして簡単に作成することです。たとえば、ang/index.scala.htmlとしましょう。次に、あなたのルートと、コントローラは次のようになります。

ルート:

GET / controllers.Application.angView() 

コントローラ:

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

私は、クライアント側のクライアントサイド・ビューを使用して好きでは詰め込むを生成し、サーバ - アプリケーションのライフサイクル全体で使用する必要のあるすべての関連データを注入します。

5

Angularルートを使用する場合の1つのアプローチは、Playを使用してインデックスページを提供し、パーシャルをパブリックディレクトリから静的リソースとして提供することです。プレイコントローラは、のように見えると

GET  /        controllers.Application.index 
GET   /assets/*file     controllers.Assets.at(path="/public", file) 

routesファイルには、次の内容を持っているでしょう。これは、あなたの資源の輸入を行うために劇のテンプレートを使用することができます

def index = Action { 
    Ok(views.html.index()) 
    } 

(また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> 

、これらのアプリから参照することができます。そのようなJS:

 when('/partial-1', {templateUrl: '/assets/partials/partial-1.html', controller: CtrlPartial1}). 
1

最終的なシード(https://github.com/angyjoe/eventual)はほぼ無傷でプレイroutesスクリプトファイルを残したまま完全にpublicフォルダから静的なHTMLページを提供しています。

シードは、HTMLのAngularJSディレクティブのスペースをクリアするために、Play Scalaテンプレートの使用を最小限に抑えます。

関連する問題