如何在通过rest提交的表单上获取默认值?

时间:2014-08-01 09:26:09

标签: html angularjs web-services rest

我很惊讶这个还没有被问过。我在网页上有一个表单,它是通过一个安静的Web服务提交的(它实际上是使用角度js)。问题是如何在表单上设置默认值? (这是为了创建,显然在编辑中我将从服务器获取值)

示例
我们假设我们在表单上有一个复选框,可以选择加入/退出营销电子邮件。

I would like to receive marketing emails [x]

在这种情况下,复选框默认为已选中,因此他们必须实际选择退出。在服务器上生成html的旧世界中,我可能会从业务层返回这些默认值,然后使用默认设置生成表单html。

解决方案1 ​​
在客户端中设置默认值。当我使用angular时,我可以有一个JS对象来表示表单的默认状态,并使用它来初始化创建表单。

我对这种方法的问题是,将这样的业务规则放在客户端中感觉有点不对。

解决方案2
另一个选项可能是隐藏具有默认值的字段,并且只允许在编辑时更改它们。这可能适用于某些类型的领域,但对于我们的optin领域,他们肯定需要对此进行审核。如果表单最初显示那些没有默认值的字段,则可以这样做,然后当您单击按钮继续时,表单将被保存。然后,客户端可以对刚刚保存的对象执行get操作,并使用现在填充的默认值显示所有字段。

我无法决定是否喜欢这种方法。它对服务器的请求越多,因此在这方面效率不高。根据哪些字段有默认值,它可能看起来有点奇怪,突然出现了一些额外的字段。

解决方案3
最后,我们可以创建一个休息Web服务来获取默认状态。我还没有看到任何其他这样的例子,所以不确定任何约定。类似的东西:

GET http://server/rest/myresource/default

这种事情有没有约定?我错过了什么?有人自己完成了这项工作并找到了最佳方法吗?

由于

2 个答案:

答案 0 :(得分:2)

如果您正在谈论编辑表单,那么您有一些"默认值" (即已保存的数据)和用户正在插入的数据。所以你基本上得到数据(通过$ http)并用它来扩展表单字段(通过angular.extend)。这是一个更好地解释它的小提琴:http://jsfiddle.net/F9rD8/

答案 1 :(得分:1)

阅读完评论后,我认为问题可能是将Angular框架视为表示层。是 - 它是一个客户端框架,但在客户端运行时,Angular提供MVC表示层。建议是使用Angular" Services"来扩充表示层。

您可能想要一个Angular Business" Service"它提供了新表单的默认值。

在Angular世界中,您的分层体系结构基本上位于客户端,其中视图和控制器构成了表示层,客户端角度服务和服务器端API构成了业务层。

角度服务 - https://docs.angularjs.org/guide/services

希望这是有道理的。