【发布时间】: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