mannaro
@mannaro
Умею профессионально гуглить

Как получить $event в ngChange

Здравствуйте! Есть у меня input
<input name='login' type='text' ng-change='change()' ng-model='login' />
И при изменении его у меня дергается метод change().

Теперь вопрос: как мне получить именно тот input, в котором произошло изменение текста?

Причина: Изменять класс input'a, если он не удовлетворяет нужным требованиям и возвращать прежний класс, если удовлетворяет.

P.S: Если есть более разумные методы, подскажите пожалуйста!
P.P.S: При использовании ngClick можно передать аргументом $event, из которого можно было вытащить саму ссылку.
  • Вопрос задан
  • 6229 просмотров
Решения вопроса 1
@XimikS
Если наглядно
image
image

Сорри за кучу кода — уж что simple_form нагенерил =)

Вообще можно и легче это сделать:
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
Насколько я понимаю, валидацию лучше делать в директивах, например как здесь: www.ng-newsletter.com/posts/validations.html в разделе Custom validations
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Валидацию инпутов стоит делать только через директивы зависящие от ngModel. Например как-то так:

angular.module('validators', [])

.directive('maxlength', function () {
    
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function ($scope, $el, attrs, ngModelCtrl) {
            ngModelCtrl.$parsers.unshift(validator);
            ngModelCtrl.$formatters.unshift(validator);
            
            function validator (value) {
                    if (value.length > attrs.maxlength) {
                           ngModelCtrl.$setValididy(false, 'maxlength')
                    }

                    return value;
            }
        }
    }
})



Пример не рабочий но должен объяснить суть. Чем это выгодно? Реюзабельность повышается в разы, не нужно городить свои велосипеды, одновременно все привязывается к скоупу и можно проверять валидность полей обращаясь к свойству $valid как у самого поля так и у формы целиком.

Вообще все что касается какой-бы то ни было работы с DOM должно быть вынесено в директивы. а onchange и ngModel нужен только для контроллера или других директив.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы