截取值会改变angular.js中的重写值

时间:2013-08-26 16:25:02

标签: javascript angularjs

在我的angular.js应用程序中,我正在渲染一个绑定到范围变量的输入字段,用户可以在其中输入数量。

我现在要做的是拦截对绑定变量的所有更改,如果输入非整数或字段为空,我想将我的范围变量设置为1。

我设法通过手表这样做但我遇到了错误,因为我的数量变量也在我的监视功能中被修改了:

$scope.$watch('quantity', function (oldValue, newValue) {
    // Some Code ...
    if (!valid) {
        $scope.quantity = 1;
    }
});

赞赏任何想法

2 个答案:

答案 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