2015-10-09 78 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