1

Делаю пароль проверку директивы для обеспечения пароля и confirm_password полей одинаковы:директива проверки пароля elem.add ошибка

angular 
    .module('myModule') 
    .directive('pwCheck', function() { 
     return { 
      require: 'ngModel', 
      link: function (scope, elem, attrs, ctrl) { 
       var password = "#" + attrs.pwCheck; 
       elem.add(password).on('keyup', function() { 
        scope.$apply(function() { 
         ctrl.$setValidity('pwmatch', elem.val() === $(password).val()); 
        }); 
       }); 
      } 
     }; 
}); 

я получаю сообщение об ошибке при добавлении keyup обработчика как и Pw PW проверки поля:

TypeError: elem.add is not a function

Так что я удалил .add() и просто сделать

elem.on('keyup', function() {

Теперь я получаю следующее сообщение об ошибке:

ReferenceError: $ is not defined

Я следующий this codepen. Я правильно установил угловое приложение, и директива записывает html-элементы (elem, attrs, ctrl) в порядке. Поэтому я не уверен, в чем проблема.

ответ

2

Отсутствует jQuery. Но я бы предложил вам использовать переменную scope внутри вас, чтобы у вас был доступ к объему контроллера к вашей директиве, потому что не создает изолированную область.

Код

angular.module('myModule') 
.directive('pwCheck', function() { 
    return { 
    require: 'ngModel', 
    link: function (scope, elem, attrs, ctrl) { 
     var password = "#" + attrs.pwCheck; 
     elem.add(password).on('keyup', function() { 
     scope.$apply(function() { 
      ctrl.$setValidity('pwmatch', elem.val() === scope[attrs.pwCheck]); 
     }); 
     }); 
    } 
    }; 
}); 

Demo CodePen

+0

Могу ли я выполнить это без jQuery? Я могу сделать 'elem.bind ('keyup', function() {', но я не уверен, как реплицировать 'add()' в пределах углового – Growler

+0

да, вы могли бы достичь этого без DOM .. но что вы подразумеваете под ' .add() 'метод делает –

+0

add() - функция jquery, которая добавляет элементы в существующую группу элементов. но в моем случае событие keyup работает только для подтверждения пароля, где директива добавляется, когда я изменяю значение в поле пароля, которое оно делает не работает. Как я могу это сделать? –

3

Надежда Я не слишком поздно.
Чтобы решить проблему просто использовать $ (эль) .Добавьте

код

angular 
    .module('myModule') 
    .directive('pwCheck', function() { 
     return { 
      require: 'ngModel', 
      link: function (scope, elem, attrs, ctrl) { 
       var password = "#" + attrs.pwCheck; 
       $(elem).add(password).on('keyup', function() { 
        scope.$apply(function() { 
         ctrl.$setValidity('pwmatch', elem.val() === $(password).val()); 
        }); 
       }); 
      } 
     }; 
}); 
1

Я хотел использовать эту директиву, а также. Но без загрузки JQuery, угловой использует jQLite, когда jQuery не загружается. Таким образом, используя element.append вместо elem.add работает.

angular.module('myApp') 
.directive('pwCheck', function() { 
    return { 
    require: 'ngModel', 
    link: function (scope, element, attrs, ctrl) { 
     var password = "#" + attrs.pwCheck; 
     element.append(password).on('keyup', function() { 
     scope.$apply(function() { 
      ctrl.$setValidity('pwmatch', element.val() === scope[attrs.pwCheck]); 
     }); 
     }); 
    } 
}; 
}); 
Смежные вопросы