Javascript 角度:$scope.$watch($attr.ngModel)仅在验证程序在指令中返回true时工作
使用Angular的最新版本 当我设置自定义验证器并监控ngModel的更改时,我有一个指令$作用域。$watch仅在验证程序返回true时有效,而在它返回false时无效。我很好奇为什么会这样,还有什么选择 目标是,当满足正确的条件时,验证器应该将表单设置为有效。$scope.watch()用于在用户键入时进行额外的文本格式设置,例如,仅允许数字输入Javascript 角度:$scope.$watch($attr.ngModel)仅在验证程序在指令中返回true时工作,javascript,angularjs,validation,Javascript,Angularjs,Validation,使用Angular的最新版本 当我设置自定义验证器并监控ngModel的更改时,我有一个指令$作用域。$watch仅在验证程序返回true时有效,而在它返回false时无效。我很好奇为什么会这样,还有什么选择 目标是,当满足正确的条件时,验证器应该将表单设置为有效。$scope.watch()用于在用户键入时进行额外的文本格式设置,例如,仅允许数字输入 app.directive('validatorDirective', [ function ($timeout) { return
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模型中,当验证失败时,值为null
。我的假设是这导致了你的问题
在Angular 1.3中,他们添加了允许在模型上设置无效值的选项:
<input ng-model="my.value" ng-model-options="{allowInvalid: true}">
我认为可能发生的情况是,一旦模型失效,值就永远不会改变。即使您可以继续输入,模型值仍然为空,并且观察者不会触发。这很有帮助,并回答了这个特定问题。事实证明,我真正想做的是只进行数字过滤,并在输入特定序列模式时验证true。正确的方法是使用$parser、$formatters和$validator。这也是一个很好的参考