【问题标题】:View Model validation with Angular JS?使用 Angular JS 查看模型验证?
【发布时间】:2016-04-30 14:40:59
【问题描述】:

作为一名从 asp.net mvc 转向 angular js 的开发人员,我对 angular js 验证的默认验证实现感到失望。似乎 Angular 默认在视图中实现客户端验证,这违反了关注点分离规则(恕我直言)。

就个人而言,我更喜欢在视图模型中实现验证规则而不是视图。不确定这是否在 Angular js 社区中被广泛采用和推荐。

所以我的问题是:
1) Angular js 中验证的默认实现是否比将其分离到视图模型中更好? 2) 是否有任何现有的 Angular 库在单独的层中实现验证逻辑?

我期待这样的事情。

model.User = {
    Name: { validate: required, errorMessage: 'Name is required'},
    Price: {
        validate: number, errorMessage: 'Price should be number',
        validate: number.min = 0, number.max = 100, errorMessage = 'Price should be between 0 and 100',
    }
}

<input ng-model="User.Name" name="Name">
<input ng-model="User.Price" name="Price>

【问题讨论】:

  • Angular 的部分优点在于它使用了指令。您可能感兴趣的一个是 ngMessages。你有问题还是只是发泄一下?
  • 看起来 ngMessages 就是你想要的
  • @BrianBaker 我已经编辑了帖子以包含我的问题。是的,我们可以使用指令、过滤器等来实现它。但根本的问题是,如果没有现有的 Angular 库支持此功能,我们需要重新考虑并思考为什么其他人不单独实现验证逻辑,以及为什么在实现之前这不是 Angular js 中的一种做法我们仍处于设计阶段。
  • @pixelbits 不幸的是,没有。我们的考虑是完全从视图中删除 ng-minlength、ng-maxlength、ng-message 等(在编码期间),但它应该在页面初始加载期间从视图模型中生成。
  • 在 Angular 中,您以声明方式将验证指令放在输入控件上。然后,您可以绑定到范围内的某些模型属性,即 form.$error 或 form.name.$error 属性。根据 $error 对象的状态,您可以使用 ngMessage 呈现任何类型的消息。 Imo,实际上与 MVC 处理它的方式非常相似。

标签: javascript angularjs validation


【解决方案1】:

Angular 2 有Model Driven Forms,您可以在其中将验证逻辑带入控制器。

Good to read-forms-template-driven-vs-model-driven

【讨论】:

  • 感谢您的回复。至少我们知道它现在已经被支持了。至少,事实证明这仍然是一种更好的方法。但我们将使用 angular 1.4 进行开发。
猜你喜欢
  • 2013-07-08
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多