Angular 最小值和最大值的 JS 指令表单输入验证
Angular JS Directive Form input validation of min and max
您好,我在验证最小值和最大值形式的输入时遇到了一些问题,我有以下内容。
我的表单输入:
<div class="input short" ng-if="input.tipo_simulacao.key == 2">
<input
name="valor_simulacao_t"
ng-model="input.valor_simulacao_t"
type="text"
required
ng-minlength="1"
min="0"
max="99.99"
ng-currency currency-symbol="%"
placeholder="Valor Simulação">
</input>
<span class="input-clear"
ng-model="input.valor_simulacao_t"
ng-click="input.valor_simulacao_t = null"
ng-show="form.valor_simulacao_t.$viewValue && input.valor_simulacao_t !== ''"
>×</span>
</div>
这是用于验证的 JS 指令:
vm.$watch('input.valor_simulacao_t', function (newValue, oldValue) {
if (vm.input.valor_simulacao_t && vm.form.valor_simulacao_t && $rootScope.user.taxa_inferior_protocolo < 1) {
console.log(vm.taxa_base);
console.log(newValue);
if (newValue > vm.taxa_base) {
vm.form.valor_simulacao_t.$setValidity('max', false);
} else if (newValue < vm.taxa_base) {
vm.form.valor_simulacao_t.$setValidity('min', false);
}
};
});
现在在输入中我设置了一个带有小数点的最小和最大属性,这是一个百分比字段。
在指令中验证用户详细信息在何处能够具有低于 vm.taxa_base 变量的值,然后继续检查输入值是否高于 vm.taxa_base 值,如果是将 max 属性设置为无效,如果它小于 vm.taxa_base 值,则将 min 属性设置为无效。
我遇到的问题是,如果我将值与 % 的逗号分隔符放在一起,例如 9,60 之后广告 % 它说正确无效是 vm.taxa_base = 2.5 但如果我插入一个没有逗号的 15 或 15,00 的值设置为它不应该假设的有效值,因为在指令中我正在比较每个较小或较大的值。
因为我被困在这里,提前致谢。
好吧,在弄乱它之后我发现它与 ng-currency 模块有关,因为我从输入中取出它,最小和最大验证器工作正常但不是 ng-currency 格式为 %作为逗号分隔符,值是点分隔的。
这是验证输入的观察者:
vm.$watch('input.valor_simulacao_t', function (newValue, oldValue) {
if (vm.input.valor_simulacao_t && vm.form.valor_simulacao_t && $rootScope.user.taxa_inferior_protocolo < 1) {
if (newValue > vm.taxa_base) {
console.log('Error Greater 2');
vm.form.valor_simulacao_t.$setValidity('max', false);
} else if (newValue < vm.taxa_base) {
console.log('Error Lesser 2');
vm.form.valor_simulacao_t.$setValidity('min', false);
} else {
console.log('Pass 2');
vm.form.valor_simulacao_t.$setValidity('max', true);
vm.form.valor_simulacao_t.$setValidity('min', true);
}
};
});
现在输入(指令):
<input
name="valor_simulacao_t"
ng-model="input.valor_simulacao_t"
type="text"
required
ng-minlength="1"
min="0"
max="99.99"
placeholder="Valor Simulação">
</input>
有没有办法以某种方式格式化数字以遵守百分比格式?
好的,找到了一种现在可以正常用于验证的解决方案。
这是指令:
.directive('formatPercentage', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elem, attr, ngModel) {
if (!ngModel) return;
elem.on('focusout', function() {
var str = elem.val();
elem.val(str + ' %');
});
elem.on('focus', function() {
var str = elem.val();
elem.val(str.substring(0, str.length - 2));
});
ngModel.$formatters.unshift(function () {
ngModel.$modelValue = parseFloat(ngModel.$modelValue).toFixed(2).replace('.', ',');
return (ngModel.$modelValue == 'NaN') ? '' : ngModel.$modelValue + ' %';
});
ngModel.$parsers.unshift(function (viewValue) {
return parseFloat(viewValue.replace(',', '.')).toFixed(2);
});
}
};
})
这里是自定义指令的输入:
<input
name="valor_simulacao_t"
ng-model="input.valor_simulacao_t"
type="text"
required
ng-minlength="1"
min="0"
max="99.99"
format-percentage
placeholder="Valor Simulação"
autocomplete="off">
</input>
您好,我在验证最小值和最大值形式的输入时遇到了一些问题,我有以下内容。
我的表单输入:
<div class="input short" ng-if="input.tipo_simulacao.key == 2">
<input
name="valor_simulacao_t"
ng-model="input.valor_simulacao_t"
type="text"
required
ng-minlength="1"
min="0"
max="99.99"
ng-currency currency-symbol="%"
placeholder="Valor Simulação">
</input>
<span class="input-clear"
ng-model="input.valor_simulacao_t"
ng-click="input.valor_simulacao_t = null"
ng-show="form.valor_simulacao_t.$viewValue && input.valor_simulacao_t !== ''"
>×</span>
</div>
这是用于验证的 JS 指令:
vm.$watch('input.valor_simulacao_t', function (newValue, oldValue) {
if (vm.input.valor_simulacao_t && vm.form.valor_simulacao_t && $rootScope.user.taxa_inferior_protocolo < 1) {
console.log(vm.taxa_base);
console.log(newValue);
if (newValue > vm.taxa_base) {
vm.form.valor_simulacao_t.$setValidity('max', false);
} else if (newValue < vm.taxa_base) {
vm.form.valor_simulacao_t.$setValidity('min', false);
}
};
});
现在在输入中我设置了一个带有小数点的最小和最大属性,这是一个百分比字段。 在指令中验证用户详细信息在何处能够具有低于 vm.taxa_base 变量的值,然后继续检查输入值是否高于 vm.taxa_base 值,如果是将 max 属性设置为无效,如果它小于 vm.taxa_base 值,则将 min 属性设置为无效。
我遇到的问题是,如果我将值与 % 的逗号分隔符放在一起,例如 9,60 之后广告 % 它说正确无效是 vm.taxa_base = 2.5 但如果我插入一个没有逗号的 15 或 15,00 的值设置为它不应该假设的有效值,因为在指令中我正在比较每个较小或较大的值。
因为我被困在这里,提前致谢。
好吧,在弄乱它之后我发现它与 ng-currency 模块有关,因为我从输入中取出它,最小和最大验证器工作正常但不是 ng-currency 格式为 %作为逗号分隔符,值是点分隔的。
这是验证输入的观察者:
vm.$watch('input.valor_simulacao_t', function (newValue, oldValue) {
if (vm.input.valor_simulacao_t && vm.form.valor_simulacao_t && $rootScope.user.taxa_inferior_protocolo < 1) {
if (newValue > vm.taxa_base) {
console.log('Error Greater 2');
vm.form.valor_simulacao_t.$setValidity('max', false);
} else if (newValue < vm.taxa_base) {
console.log('Error Lesser 2');
vm.form.valor_simulacao_t.$setValidity('min', false);
} else {
console.log('Pass 2');
vm.form.valor_simulacao_t.$setValidity('max', true);
vm.form.valor_simulacao_t.$setValidity('min', true);
}
};
});
现在输入(指令):
<input
name="valor_simulacao_t"
ng-model="input.valor_simulacao_t"
type="text"
required
ng-minlength="1"
min="0"
max="99.99"
placeholder="Valor Simulação">
</input>
有没有办法以某种方式格式化数字以遵守百分比格式?
好的,找到了一种现在可以正常用于验证的解决方案。 这是指令:
.directive('formatPercentage', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elem, attr, ngModel) {
if (!ngModel) return;
elem.on('focusout', function() {
var str = elem.val();
elem.val(str + ' %');
});
elem.on('focus', function() {
var str = elem.val();
elem.val(str.substring(0, str.length - 2));
});
ngModel.$formatters.unshift(function () {
ngModel.$modelValue = parseFloat(ngModel.$modelValue).toFixed(2).replace('.', ',');
return (ngModel.$modelValue == 'NaN') ? '' : ngModel.$modelValue + ' %';
});
ngModel.$parsers.unshift(function (viewValue) {
return parseFloat(viewValue.replace(',', '.')).toFixed(2);
});
}
};
})
这里是自定义指令的输入:
<input
name="valor_simulacao_t"
ng-model="input.valor_simulacao_t"
type="text"
required
ng-minlength="1"
min="0"
max="99.99"
format-percentage
placeholder="Valor Simulação"
autocomplete="off">
</input>