如何将自定义指令合并到角度验证框架中

时间:2014-09-16 16:55:50

标签: angularjs angularjs-directive

我有一个旨在分配给普通文本输入的指令。

<input type="text" ng-model="fooModel" foo-input size="30"
       placeholder="insert value"></input>

我有很多验证函数,比如测试数字的精度,我使用$解析器来控制提交的值。

myApp.directive('fooInput', function () {
    return {
        restrict: 'A',
        require: 'ngModel',

        controller: function ($scope, $element, $attrs) {
                        this.errorMessage = ""
        },
        link: function (scope, element, attrs, ctrl)

         return ctrl.$parsers.push(function (inputValue) {
                var originalVal = element.val();


                if (!testForOverPrecision(numericVal)) {
                    //do something here to set the directive as invalid
                }

                if (originalVal != inputValue) {
                    ctrl.$setViewValue(res);
                    ctrl.$render();
                }
            });

我有两个问题:

  1. 如何让它与isValid服务一起使用,并且我必须拥有错误消息的控制器范围
  2. 将$解析器推送到return语句
  3. 中是否正确

1 个答案:

答案 0 :(得分:1)

我正在使用Angular 1.2x并且我创建了一个指令来确定文本是否包含@符号。

.directive('noAt', function() {
    return {
        require: 'ngModel',
        link: function(scope, elm, attrs, ctrl) {
            ctrl.$parsers.unshift(function(viewValue) {
                if (/@/.test(viewValue)) {
                    ctrl.$setValidity('noAt', false);
                    return undefined;
                } else {
                    ctrl.$setValidity('noAt', true);
                    return viewValue;
                }
            });
        }
    };
})