在我的angular.js应用程序中,我正在渲染一个绑定到范围变量的输入字段,用户可以在其中输入数量。
我现在要做的是拦截对绑定变量的所有更改,如果输入非整数或字段为空,我想将我的范围变量设置为1。
我设法通过手表这样做但我遇到了错误,因为我的数量变量也在我的监视功能中被修改了:
$scope.$watch('quantity', function (oldValue, newValue) {
// Some Code ...
if (!valid) {
$scope.quantity = 1;
}
});
赞赏任何想法
答案 0 :(得分:1)
如果我理解正确,您可以使用指令仅限数字部分或您的问题,这是我编写和使用的指令,我不知道这是否会解决您的监视功能问题:
myApp.directive('numbersOnly', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, modelCtrl) {
modelCtrl.$parsers.push(function(inputValue) {
// this next if is necessary for when using ng-required on your input.
// In such cases, when a letter is typed first, this parser will be called
// again, and the 2nd time, the value will be undefined
if (inputValue == undefined)
return ''
var transformedInput = inputValue.replace(/[^0-9]/g, '');
if (transformedInput != inputValue) {
modelCtrl.$setViewValue(transformedInput);
modelCtrl.$render();
}
return transformedInput;
});
}
};
});
我还使用ngBlur
(pre AngularJS 1.2)指令来限制监视执行的回调,不知道这对你的实例是否有帮助。
答案 1 :(得分:1)
您可以使用$timeout
强制执行scope.apply
。简单地说,你可以这样做
$scope.check = function () {
// Some Code ...
if (!valid) {
$timeout(function () {
$scope.quantity = 1;
});
}
};
的 DEMO 强>