Angular: $scope.$watch($ attrs . ngmodel)只在指令的验证器返回true时起作用
Angular: $scope.$watch($attr.ngModel) only working when validator returns true in directive
使用最新版本的Angular。
当我在设置自定义验证器并监控ngModel的变化时,我有一个指令。美元的范围。$watch只在验证器返回true时工作,而在返回false时不工作。我很好奇为什么会这样,还有什么替代方案。
目标是验证器应该在满足适当条件时将表单设置为有效。$scope.watch()用于在用户输入时进行额外的文本格式化,例如,只允许数字输入。
app.directive('validatorDirective', [
function ($timeout) {
return {
restrict: 'A',
require: 'ngModel',
link: function ($scope, $element, $attr, $controller) {
$scope.$watch($attr.ngModel, function (val) {
// no output when validator returns false, but returns model updates when validator returns true
console.log(val);
});
$controller.$validators.validFn = function (modelValue, viewValue) {
return false;
};
}
}
}
}]);
在Angular中,当验证失败时,ng-model
的值是null
。我认为这是造成你的问题的原因。
在Angular 1.3中,他们添加了ng-model-options来允许在模型上设置无效的值:
<input ng-model="my.value" ng-model-options="{allowInvalid: true}">
我认为可能发生的情况是,一旦模型失效,值永远不会改变。即使您可以继续键入输入,模型值仍然为空,并且监视器不会触发。
相关文章:
- 表单级别的Anguarjs指令,访问所有字段并检查验证
- 是否有任何不需要后端的验证码角度指令
- 在 AngularJs 中验证自定义指令(我想让它成为必需的)
- 角度指令:使提交按钮指令侦听表单验证
- 在同一页面上多次使用的自定义指令 (AngularJS) 中的验证
- Angularjs - 使用自定义指令验证初始 url 值
- 角度指令验证和解密
- AngularJS通过指令重新验证提交
- 验证指令代码在ng重复中的每个项目上执行
- $render在角度1.2.2停止工作(文件验证指令)
- 在$invalid上添加验证指令并从文本框中删除数据的指令
- 通过摘要运行验证指令
- Angular 自定义验证指令在 KeyUp 事件上不显示错误
- 角度的自定义验证指令
- 自定义验证指令覆盖其他验证
- 自定义表单验证指令不传递输入数据
- blur angular JS上的异步验证指令
- 如果多个元素使用相同的自定义验证指令,如何验证表单
- 从外部访问表单验证指令
- 在AngularJS中验证指令中的字段