如以下代码示例中所示,名为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上的验证。 - 谢谢
答案 0 :(得分:1)
您可以为mode
添加观察程序,并在更改时重新验证值:
scope.$watch('mode', function(){
var valid = scope.mode != 'pct' || ngModel.$modelValue <= 100;
ngModel.$setValidity('checkPct', valid);
}