如何动态分配valdr规则?

时间:2015-01-30 03:51:50

标签: angularjs valdr

原谅我对AngularJS和valdr的最低限度知识......

我有一个使用AngularJS的应用程序,其中动态生成ui以使用提供的元数据编辑某个对象,以确定解释对象成员的类型。我将添加额外的元数据来为每个成员设置验证规则。

我找到了valdr,我想知道是否可以使用针对每个可编辑字段重复调用的valdrProvider.addConstraints()来添加规则。据推测,规则名称必须是唯一的吗?

如何在卸载数据时从规则集中删除规则?

这种方法有效还是我应该直接使用AngularJS指令映射规则元数据?

1 个答案:

答案 0 :(得分:2)

你的方法听起来不错。 valdr提供了removeConstraint(constraintName)函数,可以满足您的需求。但请注意,这会删除给定模型类型的所有约束。

https://github.com/netceteragroup/valdr#getting-started为例。

yourApp.config(function(valdrProvider) {
  valdrProvider.addConstraints({
    'Person': {
      'lastName': {
        'size': {
          'min': 2,
          'max': 10,
          'message': 'Last name must be between 2 and 10 characters.'
        },
        'required': {
          'message': 'Last name is required.'
        }
      },
      'firstName': {
        'size': {
          'min': 2,
          'max': 20,
          'message': 'First name must be between 2 and 20 characters.'
        }
      }
    }
});

调用removeConstraint('Person')会删除 Person的所有约束。如果您只想删除firstName因为删除了名字输入字段,则可以使用addConstraints的更新约束定义再次调用Person

最后的说明:

  • 如果删除字段,则valdr不会强制删除约束(请参阅https://github.com/netceteragroup/valdr/issues/46上的讨论)
  • 是的,约束名称是唯一的,因为它们绑定到应具有唯一名称的模型类型,不应该是具有不同实现的两种Person类型