Попытка сопоставления паролей с использованием пользовательской директивы в угловых js. Я не могу заставить его работать, хотя я просмотрел несколько руководств по Google. Я создал Plunker, который показывает, что он не работает на plunker.Подтверждение пароля angularjs validation
HTML:
<div class="form-group" ng-class="{ 'has-error': form.password.$invalid && !form.username.$pristine }">
<label for="password">Password</label>
<input type="password" name="password" id="password" class="form-control" ng-model="user.password" required ng-minlength="6" ng-maxlength="12"/>
</div>
<div class="form-group" ng-class="{ 'has-error': form.confirm-password.$invalid && !form.confirm-password.$pristine }">
<label for="confirm-password">Confirm Password</label>
<input type="password" name="confirm-password" id="confirm-password" class="form-control" ng-model="user.confirmpwd" required equal="{{user.password}}"/>
<span ng-show="user.confirmpwd.$error.equal" class="help-block">Password does not match above</span>
</div>
JAVASCRIPT:
app.directive('equal', [
function() {
var link = function($scope, $element, $attrs, ctrl) {
var validate = function(viewValue) {
var comparisonModel = $attrs.equal;
console.log(viewValue + ':' + comparisonModel);
if(!viewValue || !comparisonModel){
// It's valid because we have nothing to compare against
ctrl.$setValidity('equal', true);
}
// It's valid if model is lower than the model we're comparing against
ctrl.$setValidity('equal', viewValue === comparisonModel);
return viewValue;
};
ctrl.$parsers.unshift(validate);
ctrl.$formatters.push(validate);
$attrs.$observe('equal', function(comparisonModel){
return validate(ctrl.$viewValue);
});
};
return {
require: 'ngModel',
link: link
};
}]);
Проблема, кажется, вокруг пользовательской директивы, он не кажется, являются обязательными к элементу ngModel правильно? Я чувствую, что мне нужно пропустить что-то простое, я только начинаю изучать AngularJS.
Ааа этих штопать штрихи. Я изменил это, и все сработало отлично, за исключением того, что, как вы упомянули, пароль не определен до 6 символов. Что было бы лучше всего здесь? Должен ли я просто использовать validator для проверки подлинности, если для сравненияModel (первый пароль) является <6 символов? – jekelija
@jekelija Я бы, вероятно, отобразил сообщения проверки для поля пароля, информирующие пользователя о том, что пароль слишком короткий или слишком длинный. Таким образом, было бы очевидно, почему проверка пароля не выполняется - потому что пароль, который будет подтвержден, недействителен для начала. –
@BohuslavBurghardt Кроме того, вы не должны использовать парсеры и форматирующие элементы для проверки поля. По этой причине существуют валидаторы. Вот вилка, использующая один: http://plnkr.co/edit/ogJIlMyqWrOlXpyv9psB?p=preview –