当输入的有效性取决于另一个输入的值 - 或者如何在Angularjs中触发验证?

时间:2014-06-12 20:44:19

标签: angularjs validation

如以下代码示例中所示,名为amountOrPercet的输入可以解释为金额或百分比值,具体取决于模式单选按钮的状态。

<input type="radio" name="mode" value="amt" ng-model="mode"/> Amount
<input type="radio" name="mode" value="pct"ng-model="mode"/> Percent

<input type="text" name="amountOrPercent" ng-model="amountOrPercent" check-percent/> 

我已经将一个属性指令放在一起,以使amountOrPercent的值大于100,以防它必须被解释为百分比:

myApp.directive('checkPct', function () {
return {
    require: 'ngModel',
    link: function (scope, elem, attr, ngModel) {

        ngModel.$parsers.unshift(function (value) {
            var valid = scope.mode != 'pct' || value <= 100;
            ngModel.$setValidity('checkPct', valid);
            return valid ? value : undefined;
        });

        ngModel.$formatters.unshift(function (value) {
            ngModel.$setValidity('checkPct', scope.mode != 'pct' || value <= 100);
            return value;
        });
    }
};

});

当模式的值保持不变时,验证按预期工作。但是,当更改mode的值时,不会重新验证amountOrPercent的值,除非用户更改amountOrPercentage的值。 我知道我可以使用手表根据模式的变化做一些动作,但我的问题是当模式改变时我如何触发amountOrPercent上的验证。 - 谢谢

1 个答案:

答案 0 :(得分:1)

您可以为mode添加观察程序,并在更改时重新验证值:

scope.$watch('mode', function(){
  var valid = scope.mode != 'pct' || ngModel.$modelValue <= 100;
  ngModel.$setValidity('checkPct', valid);

}