我遇到麻烦的是这两个看似强大的框架的结合。似乎大多数可以通过1完成的事情可以通过2.如何最好地利用这两个?有没有任何思维模式? 以CRUD应用程序为基础示例 - 我可以写一个路由mysite / listnames,它映射到一个正在运行的控制器!这将使用代码 -
呈现模板@(names:List[String])
@main("Welcome") {
@for( name <- names ){
<p> Hello, @name </p>
}
请注意,main是典型的自举模板。 但是现在这个产生的输出似乎对Angular没有用,如果我想添加一个输入框来过滤这些名称,或者我想对它们做任何事情。 什么是典型的处理方式? 基本的东西似乎是 -
1)如何将Play渲染模板后到达的数据传递给angular,以供以后在客户端使用。
2)是否建议将这两个框架一起用于涉及面向数学对象的后端+服务器的大型应用程序,以及前端相当密集的UI?
答案 0 :(得分:45)
有很多方法可以将这两个框架结合起来。一切都取决于你想要对每个人进行多少考虑。例如,您的Play 2
应用程序可能只从一方(服务器端)提供JSON请求/响应,而AngularJS将从客户端提供所有其他内容。考虑您的基本CRUD应用程序示例:
Play 2控制器:
def getNames = Action {
val names = List("Bob","Mike","John")
Ok(Json.toJson(names)).as(JSON)
}
您的播放根目录:
GET /getNames controllers.Application.getNames
一个AngularJs控制器:
app.controller('NamesCtrl', function($scope) {
// get names using AngularJS AJAX API
$http.get('/getNames').success(function(data){
$scope.names = data;
});
});
我们的HTML:
<!doctype html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"> </script>
</head>
<body>
<div>
<ul>
<li ng-repeat=" name in names">{{name}}</li>
</ul>
</div>
</body>
</html>
通过这种方式,您可以完全区分问题,对于客户端而言,服务器端的实现方式无关紧要,只需要有效的JSON作为响应即可。这被认为是一种很好的做法。
但是,您当然可以从Play 2
呈现大部分HTML,并在需要时使用AngularJS
来表示某些特定内容。一切都取决于您为应用选择的概念。
...如何传递渲染模板后到达的数据 播放角度以供以后在客户端使用?
我认为这不是一个好主意,但您肯定可以使用ngInit
这样的指令来执行此操作:
@(message:String)
@main("Welcome") {
<div ng-init="angular_message = @message">
<h1>Hello, {{angular_message}} !</h1>
</div>
}
您将angular_message
初始化scope
来自@message
模板的Play 2
值。{/ p>
是否可以将这两个框架一起用于a 涉及数学对象后端+的大型应用程序 服务器,以及前端相当密集的用户界面?
从我的观点来看,是的,它是两个很棒的框架,它们完美地协同工作。