gpt4 book ai didi

angularjs - Grails 3 和 angular - 如何将输入参数传递给后端 Controller

转载 作者:行者123 更新时间:2023-12-02 14:49:48 26 4
gpt4 key购买 nike

我很抱歉这个问题提前,但我不知道该怎么办了。我最近开始使用 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 所需的信息,但我无法在后端访问它,因为后端中的保存方法是使用数据类型 Foo 调用的,因此 Bar 在 Foo 中为空。

到目前为止,我有一个用于 Foo 的前端 Controller ,并且在请求 Foo.controller 后,Foo.controller 会注入(inject)一个带有 action: 'save' 的 Foo.service,以便在后端以某种方式调用 save 方法。

以下是重要的代码部分:

前端 Controller :
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 后端 Controller :
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 的了解还不够,但这对于本周末完成非常重要,我绝对需要任何帮助。 :-(

提前非常感谢!

最佳答案

在最终找出解决方案后,我忘了编辑我的答案。

我感到困惑的原因是我缺少关于 grails 工作原理的知识。我的背景是更广泛的 NodeJS 和一些 Java 经验。我只是习惯于使用一个请求对象,将 POST 请求的请求参数封装在其主体中。

在 NodeJS 中,我通过函数调用中的参数( function(req, res, next), res 封装 http 数据)接收请求参数。

grails 中的问题是,即使它从未在我的后端 Controller 中的任何地方定义过,也已经可以访问这些数据:请求和参数对象!

http://docs.grails.org/3.1.1/ref/Controllers/params.html

我只需要在我的后端 Controller 中添加以下代码:

params.putAll(request.JSON as Map)

并删除我的保存方法的输入参数,这导致:
def save() {
params.putAll(request.JSON as Map)

log.println(params)
}

当有其他背景时,grails 中发生的魔法可能会非常令人困惑,特别是如果您没有时间通过​​一些教程来习惯它。

干杯,

维加阿

关于angularjs - Grails 3 和 angular - 如何将输入参数传递给后端 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com