【发布时间】:2016-05-29 21:53:02
【问题描述】:
我正在将我在 Play Framework 2.5 中编写的应用程序更改为使用 AngularJs 的单页应用程序。
以下是我所做工作的概述:
- 使用 Scala 模板的 @for 显示帖子列表
- 每个帖子都使用包含的模板呈现
sn-p:
@for(post <- posts) {
@fragments.post(post)
}
到目前为止,这是我对 Angular 所做的:
- 使用 $http 通过 Scala 的 javascript 路由从数据库中检索数据
- 使用 ng-repeat 代替 @for 来遍历列表
- 当前每个帖子都使用 {{post}} 呈现为纯 json
sn-p:
<ul>
<li ng-repeat="post in posts">
<div> {{post}} </div>
</li>
</ul>
现在无法使用某些模板显示每个帖子,以下是尝试:
- 以某种方式将 post 作为 JSON 传递给我最初使用的 Scala 模板。我尝试将模板的参数类型从 Post(scala 对象)更改为一些 Json。自然,下面的代码导致了“未找到:价值帖子”
例如:
<li ng-repeat="post in posts">
@fragments.post( {{post}} )
</li>
- 使用 Angular 指令模板而不是 Scala 模板:在下面的 angularjs 代码中,使用内联模板效果很好。我还可以使用 templateUrl 选项将模板外部化到其他文件。
例如:
<ul>
<li ng-repeat="post in posts">
<div mydirective></div>
</li>
</ul>
和js:
mainApp.directive("mydirective", function() {
return {
//template: "<h1>Made by a directive: {{post.title}} !</h1>"
templateUrl: "/assets/path_to_template"
};
});
即使后者现在正在工作,我什至不确定哪种方法会更好。我真的很喜欢能够将整个表单传递给 Scala 模板,并让它将 UI 表单绑定到控制器表单。将 AngularJs 集成到 Play 框架中确实令人困惑,Play-angular-seed 并没有让我更清楚。
实现上述目标的最佳方法是什么?
谢谢
【问题讨论】:
-
我最近构建了一个播放/角度应用程序。我的方法是 Play 路由中的所有端点都是 Angular 将通过 $http 进行的调用。然后,我为所需的任何 html 角度提供静态模板。 angular 中定义的任何路由都应该通过 play 服务于基本的 angular 应用程序(这样你就可以直接导航到任何 angular url)。仅在为整个应用程序或普通角度模板提供服务时播放提供的 html。数据总是来自明确的 $http 调用,从不包含 html(在我的情况下总是 json)。
-
@gregghz 这是有道理的。此外,我开始使用 Angular Material(我觉得它看起来很漂亮),并且有些东西在 Play 的 Scala 模板中无法正常工作。我想最好的方法是慢慢远离模板。至于通过 $http 发送数据,这似乎是合理的,尽管对于发送的所有数据对象,都需要一个 JSON 编写器,以便控制器可以在返回 Angular 之前将模型函数传递给 Json 构建器
标签: angularjs playframework playframework-2.0 scala-template