2013-04-02 19 views
6

1) Chciałbym użyć AngularJS z Play Framework 2.1.0, z Play obsługującą zawartość JSON jako back-end serwera RESTful, pojawia się od przejścia z wersji 1.x na 2.x nie jest możliwe do serwera statyczny HTML powiedzieć z folderu publicznego przy użyciu poniższego podejście:Play Framework 2.1.0 i AngularJS Integration

Routes.conf:

GET /       staticFile:/public/index.html 

powoduje Controller metody wywołania oczekiwanej wyjątkiem są podniesione.

Jedynym sposobem, znalazłem, że pracuje w trybie odtwarzania 2.1.0 pisze metody działania w kontroler jak poniżej:

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

Jest to najlepsze podejście, czy też istnieje bardziej eleganckie i funkcjonalne rozwiązanie do tego?

2) Czy istnieją potencjalne wady lub "grzędy" w takim podejściu do używania struktury JavaScript po stronie klienta dla widoku zamiast mechanizmu szablonowego opartego na Scali?

Wszelkie wskazówki byłyby bardzo mile widziane.

+0

Dlaczego to się nie uda? To nie powinno ... –

Odpowiedz

2

Gdy pliki znajdują się w folderze public, można uzyskać do nich dostęp, używając adresów URL /assets/*. Można też robić rzeczy tak:

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

Morover, powiedziałbym, że nawet jeśli jest statyczna, co chcesz, aby wygenerować niektóre dane dynamicznie w przyszłości. To, co możesz zrobić, to utworzyć plik HTML w postaci klasycznego szablonu, powiedzmy: ang/index.scala.html. Następnie trasa i kontroler będzie wyglądać następująco:

trasy:

GET / controllers.Application.angView() 

kontrolera:

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

Lubię użyciu widoki po stronie klienta na stronie klienta generowany spożywczych, a server- widoki z boku, aby przygotować pola, wstrzykuje wszystkie istotne dane, które powinny być używane przez cały okres użytkowania aplikacji.

5

Jednym z podejść do tego przy użyciu tras kątowych jest obsługiwanie strony indeksu za pomocą funkcji Odtwórz i podawanie częściowych jako zasobów statycznych z katalogu publicznego. Plik routes będzie miał następującą treść:

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

ze sterownikiem Gra wygląda jak:

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

To pozwala na użycie Plays templating robić swoje importu zasobów (działa też dobrze z WebJars) . Na przykład w swojej 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> 

Następnie można umieścić wszystkie swoje podszablonów w katalogu publicznym i służyć im jako pliki statyczne, mogą się odwoływać od aplikacji.js tak:

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

Ewentualne nasion (https://github.com/angyjoe/eventual) doskonale służy statycznych stron HTML z folderu public pozostawiając plik skryptu play routes prawie nienaruszone.

Nasienie w minimalnym stopniu korzysta z szablonów Play Scala, aby zwolnić miejsce dla dyrektyw AngularJS w kodzie HTML.