32

私は 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'});
}]);

パーシャル (Angular 固有の HTML ファイル) を保存するのに適した場所を見つけようとしています。理想的には、Play 内からそれらをテンプレート化する機能が欲しいです (つまり、それらを *.scala.html ファイルとして持っています)。次のように Play ルート ファイルを使用してこれを実現できます。

GET     /partials/phone_index       controllers.Application.phone_index

私は基本的に、次のようなコントローラーアクションにパーシャル/します。

def phone_index = Action {
  Ok(views.html.partials.phone_index())
}

私が探しているソリューションは、2 つの理想の組み合わせです。

  1. /partial/* の下にある任意のファイルにアクセスして、部分的なファイルを取得できるような、ある種のマッピングが必要です。
  2. 特定のパーシャルへのルートをオーバーライドしたいので、コントローラーアクションを使用して動的にデータを入力できます (まれです)。

何か案は?

4

7 に答える 7

4

最終シード ( https://github.com/angyjoe/eventual ) は、Play + AngularJS アプリを構築するもう 1 つの方法です。コードは恋人であり、十分に文書化されています。

于 2013-11-17T02:44:46.197 に答える
1

これは質問に正確に答えないかもしれませんが、Play/scala/Angular アプリを構築する良い例と思われるので、このプロジェクトに従うことができます:

https://github.com/lashford/modern-web-template#master

http://typesafe.com/activator/template/modern-web-template

于 2015-04-23T10:05:37.013 に答える
1

質問 1 については、次のようなルートを導入できます。

/partials/:view    controllers.Application.showView(view:String)

次に、コントローラーで、ビュー名から実際のビューにマップする必要があります。

Map("phone_index" -> views.html.partials.phone_index())

テンプレートを遅延レンダリングしたり、リクエストが存在することを要求したりする場合は、おそらく次のようにする必要があります。

val routes = Map(
  "phone_index" -> { implicit r:RequestHeader => 
     views.html.partials.phone_index()) 
  }

アクションは次のようになります。

def showView(view:String) = 
  Action { implicit r =>
    routes(view)
  }

特定のルート (質問 #2) に特定のコントローラー メソッドが必要な場合は、単純に動的ルートの上にルートを追加します。

/partials/specific    controllers.Application.specific()
于 2013-04-20T23:32:21.690 に答える
1

たとえそれが敬意を表する心からのものであっても、それはあまり良い考えではないと本当に思います.

すべての考え方をデフォルトのままにしておくことは非常に良い習慣だと思います (設定よりも規約)。これは、それぞれのパラダイム (Play と AngularJS) を分離しておくことにおそらくより関心があることを意味します。コードのメンテナンスにコストがかかる遠い将来。

2 番目の非常に重要な点は、テストのしやすさです。両方のテクノをミックスすると、アプリケーションの両側でテストを十分にカバーするミックスが得られます。乾杯

于 2013-04-26T21:17:53.423 に答える