2013-04-02 3 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) 스칼라 기반 템플릿 엔진 대신보기에 클라이언트 측 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

각도 경로를 사용할 때 재생 방법을 사용하여 인덱스 페이지를 제공하고 공용 디렉토리에서 정적 리소스로 부분을 제공하는 방법 중 하나입니다. (또한 WebJars와 함께 잘 작동)

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

이것은 당신이 당신의 자원 수입을 할 연극의 템플릿을 사용할 수 있습니다 : 재생 컨트롤러처럼 보이는와

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

다음 routes 파일은 다음과 같은 내용을 것 . 당신의 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 스칼라 템플릿을 최소한으로 사용합니다.