使用AngularJS中的自定义指令重新验证字段

时间:2014-03-14 14:49:04

标签: angularjs validation directive

我遇到这种情况,由于表单上的其他选择,字段无效。当选择更改时,我想重新验证。当选择更改时,我尝试在字段上调用$ setViewValue,但这并不能重新启用验证。有什么想法吗?

我有一个黑客工作,但我更喜欢一个干净的解决方案。

3 个答案:

答案 0 :(得分:0)

编写指令,说验证,并将其放在您的字段中,该指令的定义位于:

link:function(scope,element,args){
    element.bind('onfocus',function(){

        // Your logic
    })

    // Similarly, bind other relevant events like key presses, etc.
}

答案 1 :(得分:0)

我遇到了同样的问题,发现了一个似乎没有文档的解决方法/功能。如果需要触发ngModelController重新验证,可以执行以下操作:

ngModelCtrl.$setViewValue(value, 'your event name', true);

或者如果您不需要更新模型值

ngModelCtrl.$commitViewValue(true);

上述两种情况中的真实都是重新验证的标志。没有这个标志,我遇到的问题是,如果模型值没有改变,那么angular只是跳过验证。我使用这种方式手动将自定义控件标记为 $ dirty

来源:

https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L1843

答案 2 :(得分:0)

对您的选择进行ng-change并在其中广播一个事件:

$rootScope.$broadcast("selectChangedEvent");

然后,在你放置在你的领域的指令中,只需输入链接功能:

$rootScope.$on("selectChangedEvent", () => ngModelCtrl.$validate());

$validate runs each of the registered validators of your field.