2015-10-09 41 views
0

假设我们需要一个自定义的Angular验证器,它为错误消息提供参数。 例如,如果我们要创建一个验证程序来评估数组的最小长度,以及它何时无效,则消息应该是“最小长度为{0}”。AngularJS验证指令消息参数

现在考虑我们已经为此验证创建了一个自定义指令(如下所示),我们如何从验证指令函数向验证消息提供“{0}”参数?

这里是为一个自定义验证指令:

.directive('arrayLength', function() { 
    return { 
     require: 'ngModel', 
     link: function (scope, elm, attrs, ctrl) { 
      ctrl.$validators.arrayLength = function (modelValue, viewValue) { 
       return modelValue >= parseInt(attrs.arrayLength); 
      }; 
     } 
    }; 
}); 

在这里,我们将宣布消息:

.run([ 
    'defaultErrorMessageResolver', 
    function (defaultErrorMessageResolver) { 
     defaultErrorMessageResolver.getErrorMessages().then(function (errorMessages) { 
      errorMessages['arrayLength'] = 'Minimum length is {0}'; 
     }); 
    } 
]); 

所以...任何想法?

我相信这不是火箭科学。只是我是Angular的新手。

在此先感谢。

+0

一个plunker或的jsfiddle使用运行的代码? –

+0

是的。这里是一个小提琴:https://jsfiddle.net/4tsc7gcf/14/只要打GO!并注意显示的消息。 {0}参数是空的。 – alvesdm

回答

0

看这个。可以传递消息的自己的政策( “messageerror”)

var app = angular.module("myApp", []); 
 

 
function Fiddle($scope) {} 
 

 
app.directive('input', function() { 
 
    return { 
 
     restrict: 'E', 
 
     scope: { 
 
      minlength: "@minlength" 
 
     }, 
 
     link: function(scope, elm, attr, ctrl) { 
 
      
 
      elm.bind('keyup', function() { 
 
       var valid = (this.value && this.value.length >= scope.minlength); 
 
       if (!valid){ 
 
        if(elm.parent().find("span").length == 0) 
 
         elm.parent().append("<span style='border:solid 3px #FE2E2E'>Min is " + scope.minlength + "</span>"); 
 
       }else 
 
        elm.parent().find("span").remove(); 
 
      }); 
 
     } 
 
    }; 
 
});
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<form name="myForm" novalidate ng-app="myApp"> 
 
    <ul ng-controller="Fiddle"> 
 
    <li> 
 
     <label for="barthirty">Min 3 Char:</label> 
 
     <input input-data type="datetime" ng-model="nmTest" minlength="3"/> 
 

 
    </li> 
 
    </ul> 
 
</form>

+0

不知道我是否理解你的代码,但在我看来,它没有通过参数,而是整个消息。如果是这样,那不是我要找的。 – alvesdm

+0

我将代码中的mensageerror传递给指令中的params。现在看!在这个例子中,param被用来验证和显示消息 –

+0

我很感激你的回答,但是仍然...不是我所追求的。您的解决方案有效,但不提供原始信息。相反,它是附加HTML。我提供了一个小提琴(https://jsfiddle.net/4tsc7gcf/14/),以便更好地了解我在找什么。非常感谢! – alvesdm