Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度JS验证_Javascript_Angularjs - Fatal编程技术网

Javascript 角度JS验证

Javascript 角度JS验证,javascript,angularjs,Javascript,Angularjs,我正在尝试验证我的文本区域: <form id="contact_form" name="contactform" ng-submit="submit(contactform)" role="form"> <textarea class="form-control" id="Message" ng-model="formData.message" ng-trim="false" placeholder="Your message" required="required"

我正在尝试验证我的文本区域:

<form id="contact_form" name="contactform" ng-submit="submit(contactform)" role="form">
    <textarea class="form-control" id="Message" ng-model="formData.message" ng-trim="false" placeholder="Your message" required="required" rows="8"></textarea>
</form>
当满足此筛选器时,我会打印一个错误:

<span class="help-block" ng-show="(formData.message|wordCounter) > 200">
  Max 200 words please!
</span>

最多200字!

但是,当我签入我的控制器
联系人表单时,$valid
始终是
true
,如果筛选字计数器超过200,如何使表单无效?

您需要创建一个自定义验证指令。使用Angular 1.3非常简单

例如,一个简单的例子:

.directive('maxWords', function() {
    return {
        require: 'ngModel',
        link: function(scope, element, attrs, ngModelController) {
            ngModelController.$validators.maxWords = function(viewValue, modelValue) {
                if (!ngModelController.$isEmpty(modelValue)) {
                    return modelValue.trim().split(/\s+/).length <= attrs.maxWords;
                }
            };
        }
    };
});
.directive('maxWords',function(){
返回{
要求:'ngModel',
链接:函数(范围、元素、属性、ngModelController){
ngModelController.$validators.maxWords=函数(viewValue,modelValue){
如果(!ngModelController.$isEmpty(modelValue)){

返回modelValue.trim().split(/\s+/).length谢谢,这很有效!另一个新手问题,我是否可以将此指令放在应用程序级别或rootController上的某个位置,而不是特定的控制器上,这样我就可以在appYes的其他部分中重用它。当然,您应该在主应用程序模块中定义此指令,并且可以在任何地方使用它。它不依赖于任何特定的控制器控制器。
.directive('maxWords', function() {
    return {
        require: 'ngModel',
        link: function(scope, element, attrs, ngModelController) {
            ngModelController.$validators.maxWords = function(viewValue, modelValue) {
                if (!ngModelController.$isEmpty(modelValue)) {
                    return modelValue.trim().split(/\s+/).length <= attrs.maxWords;
                }
            };
        }
    };
});