AngularJS - 具有多个实例的控制器的表单验证

时间:2015-09-04 09:07:58

标签: javascript jquery .net angularjs asp.net-mvc

我的要求

我有业务需求,因此需要进行手动验证,因为验证规则会更少或更严格,具体取决于您进入特定屏幕的上下文。

此外,可能同时加载同一视图的多个实例(以及同一个控制器)。

当前尝试

考虑这个Plunkr

它使用以下函数进行验证:

self.SaveAndValidate = function(validationContext){
  var validationRules = self.GetValidationContext(validationContext);

  self.RemoveAllClassInfo();

  angular.forEach(validationRules, function(value){
    $('#' + value.Field).addClass('mandatory');
  })
}

您会注意到,您可以保存不同的上下文,这会导致不同的字段被指示为必填字段。

问题

您会注意到单击第二个表单的按钮无法按预期工作,因为它们的目标是第一个表单,而不是第二个表单。这是有道理的,因为我使用jQuery使用特定的字段名称来定位输入字段。在这种情况下,它们在同一页面上存在两次,因此第一次出现是针对性的。

  • 如何更改此设置,以便每个验证都以正确的形式为目标?
  • 有没有办法用Angular而不是jQuery?

1 个答案:

答案 0 :(得分:1)

您应该重新考虑添加强制类的方式。 也许创建一个自定义指令,或者只是一个ng-class = {'强制性' :isMandatory(yourId)}其中isMandatory(id)遍历您的列表以确定它是否为必填字段。

否则,最佳做法是查看ng-form并使用ng-invalid ng-touching类。 https://docs.angularjs.org/guide/forms

最后,请不要在angularJS控制器中使用JQuery。