我正在努力理解如何做以下事情:
什么是公认的声明表单的方式?我的理解是你只需要用HTML声明表单,然后像这样添加ng-model指令:
ng-model="item.name"
向服务器发送什么。我可以将item对象以JSON格式发送到服务器,并解释它。然后我可以对对象执行验证。如果验证失败,我抛出一个JSON错误,并返回什么?有没有一种可接受的方法来完成此操作?我如何以一种好的方式将验证错误从服务器推送到客户端?
我真的需要一个例子,但Angular 的文件是相当难以理解。
编辑:看来我的问题表达得不好。
我知道如何验证客户端,以及如何将错误/成功处理为承诺回调。我想知道的是,将服务器端错误消息绑定到客户端的可接受方式。假设我有一个用户名和密码注册表单。我不想轮询服务器以查找用户名,然后使用Angular确定是否存在重复。我想将用户名发送到服务器,确认没有其他帐户存在相同的名称,然后提交表单。如果发生错误,我如何将其发回?
将数据按原样(键和值)推送到服务器,并附加一个错误字段,如下所示:
{
...data...
"errors": [
{
"context": null,
"message": "A detailed error message.",
"exceptionName": null
}
]
}
然后绑定到DOM。
9条答案
按热度按时间wgmfuz8q1#
我在一些项目中需要这个,所以我创建了一个指令,最后花了一点时间把它放在GitHub上,供任何想要一个直接解决方案的人使用。
https://github.com/webadvanced/ng-remote-validate
特点:
ng-remote-throttle="550"
进行设置ng-remote-method="GET"
的HTTP方法定义(默认POST)要求用户输入其当前密码和新密码的更改密码表单的示例用法。注意:更改密码
当前要求当前密码不正确。请输入当前帐户密码。
sshcrbum2#
作为变体
g6baxovj3#
据我所知,这个问题是关于从服务器向客户端传递错误的。我不确定是否有成熟的实践。所以我将描述一种可能的方法:
假设服务器返回以下类型的对象:
然后,您可以通过以下方式将错误传递到UI:
我使每个字段无效并添加一个验证器(实际上不是验证器),因为每次更改后都会调用验证器,所以我们可以重置错误状态。
你可以尝试一下here,你也可以试试
ngMessages
,还有几个relatedarticles。zte4gxcn4#
我最近也在玩这类东西,我搞到了this demo,我想它能满足你的需要。
使用您要使用的任何特定客户端验证正常设置表单:
还请注意,我为每个字段添加了一个
serverMessage
:这是一个从服务器返回的可定制消息,它的工作方式与任何其他错误消息相同(据我所知)。
下面是控制器:
我假装用
pretendThisIsOnTheServerAndCalledViaAjax
调用服务器,你可以用 AJAX 调用代替它,关键是它只返回每个字段的验证状态。在这个简单的例子中,我使用值VALID
来指示字段是有效的,任何其他值都被视为错误消息。你可能需要更复杂的东西!从服务器获得验证状态后,只需更新表单中的状态。
您可以从scope访问表单,在本例中,表单名为
myForm
,因此$scope.myForm可以获取表单(如果您想了解form controller is here的工作原理,请参阅其源代码)。然后,您要告诉窗体该字段是有效还是无效:
或
我们还需要设置错误消息。首先使用$parse获取字段的访问器。然后从服务器分配值。
deyfvvtc5#
我有一个与Derek类似的解决方案,在codetunes blog.TL中描述过; DR:
希望对大家有用:)
1dkrff036#
好吧,德里克·艾金斯给出的答案是非常好的工作。但是:如果你用
ng-disabled="myForm.$invalid"
禁用了提交按钮-该按钮不会自动恢复为启用状态,因为基于服务器的错误状态似乎没有改变。即使你再次编辑表单中的所有字段以符合有效输入(基于客户端验证)。fgw7neuy7#
默认情况下,表单是正常提交的,如果你没有为表单中的每个字段提供name属性,那么它就不会提交正确的数据,你可以做的是在表单提交之前捕获它,然后自己通过 AJAX 提交数据。
然后在
$scope.onSubmit()
函数中:还可以通过设置所需属性来验证数据。
tnkciper8#
如果您选择ngResource,它将如下所示
最重要的是,您的HTTP响应代码必须是4xx才能进入失败回调。
blmhpbnm9#
从2014年7月开始,AngularJS 1.3增加了新的表单验证特性,包括ngMessages和asyncValidators,这样你就可以在提交表单之前对每个字段进行服务器端验证。
Angular 1.3表单验证教程:
参考资料: