如何动态分配valdr规则?

How to dynamically assign valdr rules?

请原谅我对 AngularJS 和 valdr 的了解...

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

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

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

这种方法是否有效,或者我应该直接使用 AngularJS 指令或其他方式映射规则元数据?

你的方法听起来不错。 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 因为您删除了名字输入字段,您可以使用 Person.

的更新约束定义再次调用 addConstraints

最后的笔记:

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