我对这个问题提前感到抱歉,但我不知道该怎么办。我最近开始使用AngularJS和Grails 3,我对整个数据流感到有些困惑。我正在寻找一个明确的解释,但我没有找到适合我的问题的任何好的来源。
我们有一些数据模型,将它们命名为Foo,它们与其他对象有关系,将它们命名为Bar:
class Foo implements Serializable{
Date dateCreated
Date lastUpdated
String name
Bar bar
C c
...
}
和
class Bar implements Serializable {
String name
String usid
C c
D d
E e
}
现在我想要一个输入对话框,我可以在其中填写Object Foo所需的数据,以便在数据库中使用一个http请求来保存所有对象的级联。
我现在的问题是,因为我是angularJS的新手,所以我不知道如何创建关系对象并在数据对象Foo中使用它们。我拥有在我的JSON中构建对象 Bar 所需的信息,但我无法在后端访问它,因为后端的save方法是使用数据类型 Foo 调用的因此,在Foo中,Bar为空。
到目前为止,我有一个Foo的前端控制器,并且在请求之后,Foo.controller注入一个带有动作的Foo.service:'save',以便在后端以某种方式调用方法保存。
以下是重要的代码部分:
前端控制员:
function FooCreateController(fooService, $routeParams, $location) {
var vm = this;
vm.save = function (foo) {
fooService.save({action: 'save'}, foo, function (res) {
if (res.id) {
$location.path("/foo/" + res.id);
}
else {
alert("Unknown error occurred");
}
})
}
}
fooDataFactoryService:
angular
.module("fooPackage.foo")
.factory("fooDataFactoryService", fooDataFactoryService);
function fooDataFactoryService(DomainServiceFactory) {
return DomainServiceFactory('/foo/:action/:fooId', {fooId: '@id', action: '@action'},
{"show" : {method: "GET"}},
{"save" : {method: "POST"}},
{"delete" : {method: "DELETE"}},
{"update" : {method: "PUT"}}
);
}
Groovy后端控制器:
def save(Foo foo) {
if (foo == null) {
transactionStatus.setRollbackOnly()
render status: NOT_FOUND
return
}
if (foo.hasErrors()) {
transactionStatus.setRollbackOnly()
respond foo.errors, view:'create'
return
}
foo.save flush:true
respond foo, [status: CREATED, view:"show"]
}
我怎样才能做到这一点?我不想使用数据类型Foo调用后端保存方法,而是使用请求中的输入参数。或者有更好的方法吗?
我对Angular还不够了解,但这对于本周末来说非常重要,我绝对需要任何帮助。 : - (
提前非常感谢!
答案 0 :(得分:0)
在最终找到解决方案之后,我忘了编辑我的答案。
我混淆的原因是我对格拉斯如何运作缺乏了解。我的背景是更好的NodeJS和一些Java经验。我只是习惯使用一个请求对象封装POST请求的请求参数。
在NodeJS中,我通过函数调用中的参数(函数(req,res,next),res封装http数据)接收请求参数。
grails中的问题是,即使在我的后端控制器中的任何地方都没有定义过这个数据,这个数据已经可以访问了:请求和参数对象!
http://docs.grails.org/3.1.1/ref/Controllers/params.html
我只需要在后端控制器中添加以下代码:
params.putAll(request.JSON as Map)
并删除我的save方法的输入参数,该参数导致:
def save() {
params.putAll(request.JSON as Map)
log.println(params)
}
当有另一个背景时,在grails中发生的魔法可能非常混乱,特别是如果你没有时间通过一些教程习惯它。
干杯,
Vegaaaa