23
 link: function(scope, elm, attrs, ctrl) {
        ctrl.$parsers.unshift(function(viewValue) {

            scope.pwdValidLength = (viewValue && viewValue.length >= 8 ? 'valid' : undefined);
            scope.pwdHasLetter = (viewValue && /[A-z]/.test(viewValue)) ? 'valid' : undefined;
            scope.pwdHasNumber = (viewValue && /\d/.test(viewValue)) ? 'valid' : undefined;

            if(scope.pwdValidLength && scope.pwdHasLetter && scope.pwdHasNumber) {
                ctrl.$setValidity('pwd', true);
                return viewValue;
            } else {
                ctrl.$setValidity('pwd', false);                    
                return undefined;
            }

        });
    }

http://jsfiddle.net/adamdbradley/Qdk5M/

在上面提到的小提琴中,密码验证是如何进行的?$parser.unshift 有什么作用??测试(viewValue)有什么用......?我已经提到了 AngularJs 的主站点,但无法理解任何东西......请逐步指导我如何验证它......

我是angularJS的新手..

4

2 回答 2

65

下面是一步一步的解释。请注意文档非常好:表单$parsers上的页面是您要查找的页面。

link: function(scope, elm, attrs, ctrl) {
    /**
     * This function is added to the list of the $parsers.
     * It will be executed the DOM (the view value) change.
     * Array.unshift() put it in the beginning of the list, so
     * it will be executed before all the other
     */
    ctrl.$parsers.unshift(function(viewValue) {

        scope.pwdValidLength = (viewValue && viewValue.length >= 8 ? 'valid' : undefined); // Check the length of the string
        scope.pwdHasLetter = (viewValue && /[A-z]/.test(viewValue)) ? 'valid' : undefined; // Check if the string contains letter. RegExp.test() simply returns a boolean if the string matches the regex.
        scope.pwdHasNumber = (viewValue && /\d/.test(viewValue)) ? 'valid' : undefined; // Check if the string contains digit. Same remark.

        if(scope.pwdValidLength && scope.pwdHasLetter && scope.pwdHasNumber) { // If all is good, then…
            ctrl.$setValidity('pwd', true); // Tell the controlller that the value is valid
            return viewValue; // Return this value (it will be put into the model)
        } else { // … otherwise…
            ctrl.$setValidity('pwd', false); // Tell the controlller that the value is invalid
            return undefined; // When the value is invalid, we should return `undefined`, as asked by the documentation
        }

    });
}
于 2013-09-30T22:20:57.913 回答
7

@Pawan Kalyan - Blackhole 很好地解释了它(对他的回答投了赞成票)。但我认为你也应该阅读这个有用的博客:-
Angular JS 中的自定义验证指令中的 $parsers 和 $formatters -

http://java.dzone.com/articles/parsers-and-formatters-custom

快乐编码:)

于 2014-06-25T07:28:16.050 回答