当此字段更改时,AngularJS将验证其他字段

时间:2015-11-16 08:40:27

标签: javascript angularjs validation

所以,我有一个带有一些选项的选择菜单,以及一个带有数字的文本字段。我需要文本字段具有一定的范围,具体取决于选择菜单的值,我已经使用自定义验证进行了设置。我无法弄清楚的是,当选择菜单的选项发生变化时,如何强制运行验证?

我直接在HTML中尝试:

<select ng-change="$scope.my_form.numberField.$validate()">

这没有用,所以我在控制器中创建了一个创建的函数来运行:

$scope.myFunction = function(){
    $scope.my_form.numberField.$validate();
}

然后将选择更改为

<select ng-change="myFunction()">

然后我尝试将功能代码更改为:

console.log( $scope.my_form.numberField.$validate() );

这是一个&#34; undefined&#34;

HTML文本字段如下所示:

<input type="text" name="numberField" ng-model="numberField" number-validate>

我真的不知道从这里可以去哪里。验证工作完全正确,因为我直接更新字段,但我无法弄清楚如何在选择字段更改时更新它。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是我目前的解决方案。我仍然觉得调用$ validation()应该工作,我错过了什么,所以如果有人知道这是什么问题,请分享。

我更改了我的指令以添加$ watchCollection并包含我想要跟踪的两个字段。

最初我有这样的事情:

App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        ctrl.$parsers.unshift(function(viewValue) {
            var selectField = scope.my_form.selectField

我把它改成了这样的东西:

App.directive('numberValidate', function() {
return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
        scope.$watchCollection('[my_form.numberField, my_form.selectField]', function (data) {
            var numberField = data[0];
            var selectField = data[1];

这仍然需要在html中进行数字验证:

<input type="text" name="numberField" ng-model="my_form.numberField" number-validate>

我对Angular很新,所以我不确定这是不是最好的选择,但它现在正在运作。