【发布时间】:2016-01-29 07:39:39
【问题描述】:
我有一个 AngularJS 表单,它有一个自定义验证器,用于与服务器后端检查输入值是否唯一。唯一验证由以下示例中的 mob-async-validate-unique 指令完成。
表格看起来有点像这样:
<form class="form-floating" novalidate="novalidate" ng-submit="saveItem(item)">
<div class="form-group filled">
<label class="control-label">Key</label>
<input type="text" class="form-control" ng-model="item.Key" mob-async-validate-unique >
</div>
<div class="form-group">
<button type="submit" class="btn btn-lg btn-primary">Save</button>
</div>
</form>
我想使用相同的表单添加和编辑我放在$scope 上的模型。
一切都很好除了,因为唯一验证器会在编辑操作上触发,即使值与原始值相同,然后将唯一验证为 false因为该值已经存在。在以下两种情况下,验证器都会将该字段标记为无效:
- 更改字段值,然后将其编辑回原始值
- 提交表单而不做任何更改
实现这一目标的最佳方法是什么?我能想到的天真的方法是,我必须将原始值存储在 $scope.originalValue 变量上,然后在唯一的已验证元素上添加一个属性来命名该变量。在验证器中,我将从 $scope 中读取此值并将其与当前值进行比较,以使验证器在两个值相同时接受它。我将继续执行此操作。
我在多个地方以通用方式使用唯一验证器(是的,<input> 元素上使用了更多属性,为了简单和易读,我没有包含在代码示例中)并且需要验证器完全独立运行,理想情况下希望将控制器 $scope 排除在外,这样我就可以在任何地方/我想要的任何地方使用自定义异步验证器。
【问题讨论】:
标签: angularjs angularjs-directive angularjs-validation angularjs-forms