簡體   English   中英

AngularJs Bootstrap Datepicker驗證

[英]AngularJs Bootstrap Datepicker Validation

我在輸入字段上使用Bootstrap Datepicker(在此處找到: http : //mgcrea.github.io/angular-strap/#/datepicker )。 默認情況下,日期選擇器允許輸入日期。 如果有效,則設置日期。 否則,它將日期設置為當前日期。

我寫了一條指令,它使用正則表達式僅將要輸入日期的字符:

maskModelCtrl.$parsers.push(function(inputValue) {
    var val = maskRenderLogic(inputValue, mask, maxVal);

    setAndRender(maskModelCtrl, val);
    return maskReturnLogic(val);
});

我寫了一條指令,使用模板來標准化datepicker的輸入字段:

angular.module('form.validation').directive('dateMask', ['$parse', function($parse) {
    return {
        restrict: 'E',
        scope: {
            date: '='
        },
        template: '<input ng-model="date" regex-mask="[^0-9 /]" max-length="10" bs-datepicker data-date-format="mm/dd/yyyy" placeholder="mm/dd/yyyy" >',
        replace: true
    };
}]);

問題是,日期選擇器會將所有鍵盤輸入或日期選擇轉換為當前日期。 (請參閱plnkr: http ://plnkr.co/edit/oCZnq0UOmaxC83Rv7YSs?p=preview)我不認為這些指令應該彼此不兼容。

我意識到您可能已經考慮過這一點,但是我正在編寫一個處理大量日期(輸入,修改等)的應用程序,並且測試了許多不同的日期選擇器。

Angular-UI Bootstrap日期選擇器似乎是最具有延展性和可用性的。

話雖如此,您的指令應利用$ formatters和$ parsers:

標記:

<input date-validator type="text" ng-model="date"/>

指示

app.directive('dateValidator', function() {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, elem, attrs, ctrl) {

            var validate = function(value) {
                //.. do validation logic ../
                modifiedValue = value / 2;

                // set the validity if needed                    
                ctrl.$setValidity('customDate', false);

                //return the modified value
                return modifiedValue;
            }

            // formatters fire when the model directly changes
            ctrl.$formatters.unshift(function(value) {
                return validate(value);
            });

            // parsers fire when the model changes via input 
            ctrl.$parser.unshift(function(value) {
                return validate(value);
            });


        }
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM