2013-04-02 25 views
6

1) Tôi muốn sử dụng AngularJS với Play Framework 2.1.0, với Play phân phối nội dung JSON như một máy chủ RESTful back-end, nó xuất hiện kể từ khi di chuyển từ phiên bản 1.x đến 2.x nó không thể đến máy chủ nội dung HTML tĩnh từ nói thư mục công cộng sử dụng phương pháp dưới đây:Play Framework 2.1.0 & AngularJS Integration

Routes.conf:

GET /       staticFile:/public/index.html 

Điều này dẫn đến điều khiển cuộc gọi phương thức dự kiến ​​ ngoại lệ được nâng lên.

Một cách tôi đã phát hiện ra rằng làm việc trong Chơi 2.1.0 đang viết một phương pháp hành động trong một bộ điều khiển giống như dưới đây:

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

Đây có phải là phương pháp tốt nhất hay là có một giải pháp thanh lịch hơn và chức năng này?

2) Có bất kỳ nhược điểm tiềm năng hoặc "gotchas" trong cách tiếp cận như vậy để sử dụng khung công tác JavaScript phía khách hàng cho chế độ xem thay vì công cụ mẫu dựa trên Scala không?

Mọi con trỏ sẽ được đánh giá cao.

+0

Tại sao điều đó lại không thành công? Nó không nên ... –

Trả lời

2

Khi tệp nằm trong thư mục public, bạn có thể chỉ cần truy cập chúng bằng cách sử dụng URL /assets/*. Bạn cũng có thể làm những việc như vậy:

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

Morover, tôi muốn nói rằng ngay cả khi tĩnh, bạn có thể muốn tạo một số dữ liệu động trong tương lai. Vì vậy, những gì bạn có thể làm là đơn giản để tạo tệp HTML dưới dạng mẫu cổ điển, giả sử: ang/index.scala.html. Sau đó, tuyến đường và điều khiển của bạn sẽ trông giống như:

tuyến đường:

GET / controllers.Application.angView() 

điều khiển:

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

Tôi thích sử dụng xem phía khách hàng cho phía khách hàng tạo ra chất liệu, và Server- quan điểm phụ để chuẩn bị các lĩnh vực, tiêm tất cả các dữ liệu có liên quan cần được sử dụng trong suốt toàn bộ thời gian ứng dụng.

5

Một cách tiếp cận này khi sử dụng tuyến đường góc là để phục vụ trang chỉ mục của bạn bằng cách sử dụng Play và để phục vụ partials như tài nguyên tĩnh từ thư mục công cộng. Các tập tin routes sẽ có các nội dung sau đây:

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

Với bộ điều khiển chơi trông như:

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

này cho phép bạn sử dụng Plays khuôn mẫu để làm hàng nhập khẩu tài nguyên của bạn (Nó cũng hoạt động độc đáo với WebJars) . Ví dụ trong index.scala.html của bạn:

<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> 

Sau đó, bạn có thể đặt tất cả các partials bạn trong thư mục công cộng và phục vụ họ như file tĩnh, chúng có thể được tham chiếu từ ứng dụng của bạn.js như sau:

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

Hạt giống ngâu (https://github.com/angyjoe/eventual) một cách hoàn hảo phục vụ các trang HTML tĩnh từ thư mục public khi rời khỏi tập tin kịch bản Chơi routes gần như nguyên vẹn.

Hạt giống sử dụng tối thiểu các mẫu Play Scala để xóa không gian cho các chỉ lệnh AngularJS trong HTML của bạn.

Các vấn đề liên quan