结合游戏!带有Angular.js的Framework 2.xx

时间:2014-01-25 06:26:56

标签: angularjs playframework playframework-2.0

我遇到麻烦的是这两个看似强大的框架的结合。似乎大多数可以通过1完成的事情可以通过2.如何最好地利用这两个?有没有任何思维模式? 以CRUD应用程序为基础示例 - 我可以写一个路由mysite / listnames,它映射到一个正在运行的控制器!这将使用代码 -

呈现模板
@(names:List[String])
@main("Welcome") {

@for( name <- names ){ 
    <p> Hello, @name </p>
}

请注意,main是典型的自举模板。 但是现在这个产生的输出似乎对Angular没有用,如果我想添加一个输入框来过滤这些名称,或者我想对它们做任何事情。 什么是典型的处理方式? 基本的东西似乎是 -

1)如何将Play渲染模板后到达的数据传递给angular,以供以后在客户端使用。

2)是否建议将这两个框架一起用于涉及面向数学对象的后端+服务器的大型应用程序,以及前端相当密集的UI?

1 个答案:

答案 0 :(得分:45)

有很多方法可以将这两个框架结合起来。一切都取决于你想要对每个人进行多少考虑。例如,您的Play 2应用程序可能只从一方(服务器端)提供JSON请求/响应,而AngularJS将从客户端提供所有其他内容。考虑您的基本CRUD应用程序示例:

  1. Play 2控制器:

    def getNames = Action {
    
      val names = List("Bob","Mike","John")
      Ok(Json.toJson(names)).as(JSON)
    
    }
    
  2. 您的播放根目录:

    GET /getNames controllers.Application.getNames

  3. 一个AngularJs控制器:

    app.controller('NamesCtrl', function($scope) {
        // get names using AngularJS AJAX API  
        $http.get('/getNames').success(function(data){
            $scope.names = data;
        });
    });
    
  4. 我们的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>
    
  5. 通过这种方式,您可以完全区分问题,对于客户端而言,服务器端的实现方式无关紧要,只需要有效的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   涉及数学对象后端+的大型应用程序   服务器,以及前端相当密集的用户界面?

    从我的观点来看,是的,它是两个很棒的框架,它们完美地协同工作。