2015-03-19 2 views
1

Я пытаюсь проверить мою текстовую область:Угловой JS проверка

<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> 

Для максимального количества слов, поэтому я добавил фильтр:

app.filter('wordCounter', function() { 
    return function (value) { 
    if (value && typeof value === 'string') { 
     return value.trim().split(/\s+/).length; 
    } else { 
     return 0; 
    } 
    }; 
}); 

И когда этот фильтр встретил я распечатать ошибка:

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

Но до сих пор, когда я проверяю в мой контроллер contactform.$valid всегда true, как я могу сделать форму недействительной, если слово wordcounter фильтра больше 200?

ответ

2

Вам необходимо создать специальную директиву проверки. С Angular 1.3 $validators это очень просто.

Например, просто один:

.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; 
       } 
      }; 
     } 
    }; 
}); 

Демо:http://jsfiddle.net/m3pp71o4/

+0

спасибо, что работает! Еще один вопрос новичков, могу ли я поместить эту директиву где-нибудь на уровне приложения или rootController, а не на конкретный контроллер, чтобы я мог повторно использовать его в других частях приложения. –

+0

Да, конечно. Вы должны определить эту директиву в основном модуле приложения и сможете использовать ее повсюду. Это не зависит от какого-либо конкретного контроллера. – dfsq

+0

звучит как победа, спасибо –

Смежные вопросы