javascript - 从资源错误回调内的范围访问表单

标签 javascript jquery json angularjs

我在提交时进行客户端验证,如果表单有效,我调用资源,成功后一切都很好,但现在在错误处理程序上我也在我的数据传输对象 bean 上进行服务器端验证,其中有一些 Hibernate 验证器注释,当这些注释失败时,我返回一个带有失败字段名称和消息的 json。现在我想将我的输入字段从我的 Angular Controller 设置为无效,但我无法从范围访问表单,甚至无法作为错误回调函数中的参数。

$scope.submit = function (saleForm) {
    if (saleForm.$invalid) {
        return;
    }

    $scope.sale.$save(function (sale) {
        $modalInstance.close(sale);
        $scope.alerts.push({type: 'success', msg: 'Sale successfully added!'});
    }, function (errors) {
        for (var field in errors.data) {
            $scope.saleForm.$setValidity(field, false); // <-- wrong approach?
        }
    })
};

我从 json 返回的字段名称与我的网站上的字段名称相匹配。我在这里做错了什么?通过循环,我想将所有返回到无效状态的字段设置为无效状态。

最佳答案

除了上面评论中已经提到的错误之外,您还错误地使用了 $setValidity() 函数。

$setValidity 接受两个参数:
1.validationErrorKey(字符串)
2. isValid( bool 值)

当您将validationErrorKey的有效性设置为false时,“撤消”它的唯一方法是将同一validationErrorKey的有效性设置为true
通过调用 $setValidity(false) 您实际上是在调用 $setValidity('false', undefined) ,它相当于 $setValidity('false', false)
但是,由于没有任何东西可以将validationErrorKey 'false' 的有效性设置为true,因此您的控件将永远无效。

要解决这个问题,您还需要指定validationErrorKey。
例如。数字字段可能无效,因为它不是数字 (validationErrorKey: number),因为它超出了最大允许值 (validationErrorKey: max),因为它是必需的并且空(validationErrorKey:必需)等

因此,您的服务器还应该返回validationErrorKey(例如为什么它无效),以便您可以正确使用:

saleForm[field].$setValidity(errorKey, false);

关于javascript - 从资源错误回调内的范围访问表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24477140/

相关文章:

javascript - 如何在用户离开网站/域时向用户发出 JavaScript 警报?

javascript - 如何从这个 json 字符串中读取数据?

Javascript:即使使用 jquery.getScript() 也会出现随机 "Object has no method"错误

javascript - 如果更改构造函数的原型(prototype),为什么对象的构造函数属性会更改?

javascript - 使用 jQuery 设置要检查的单选框

javascript - 创建标签的输入字段

php - Android JSON 从 PHP 获取数据

php - 从 ajax 响应中提取数据

javascript - jQuery gt(0) 选择器问题

javascript - 在 vuetify 中管理 vuelidate 验证