0

Ich habe Anmeldeformular in meiner ionischen App (the code available here), die Anmeldeansicht hat es eigenen Controller. Das Passwort bestätigen hat eine Direktive, um die Übereinstimmung mit dem Hauptpasswort zu überprüfen. Der Registrierungsbutton ist deaktiviert, bis das Formular gültig ist. aber das Formular wird nie gültig. Der password_c Eingang ist immer ungültig.AngularJs- Formularvalidierungsrichtlinie. Die Passwortbestätigung ist immer ungültig

<ion-view view-title="Register Form"> 
    <ion-content> 
    <form ng-submit="signup()" name="regForm" novalidate> 
     <div> 
     <label for="email" .....></label> 
     <label for="password" ......></label> 
     <label for="password_c"> 
       <input type="password" id="password_c" name="password_c" ng-model="registerForm.password_c" valid-password-c required> 
        <span ng-show="regForm.password_c.$error.required && regForm.password_c.$dirty">Please confirm your password.</span> 
        <span ng-show="!regForm.password_c.$error.required && regForm.password_c.$error.noMatch && regForm.password.$dirty">Passwords do not match.</span> 
      </label> 
       <button type="submit" ng-disabled="!regForm.$valid"> 
     </div> 
    </form> 
    </ion-content> 
</ion-view> 

und dies ist die Richtlinie:

.directive('validPasswordC', function() { 
     return { 
     require: 'ngModel', 
     link: function (scope, elm, attrs, ctrl) { 
      ctrl.$parsers.unshift(function (viewValue, $scope) { 
      var noMatch = viewValue != scope.regForm.password.$viewValue 
      ctrl.$setValidity('noMatch', !noMatch) 
      }) 
     } 
     } 
    }) 

ich console.log die ng-show Zustand; Wenn die Kennwörter übereinstimmen, wird die Bedingung undefiniert.

console.log(!regForm.password_c.$error.required && regForm.password_c.$error.noMatch && regForm.password.$dirty) 

getrennt; zuerst die .required werden undefined dann .noMatch

Antwort

1

Ich kann es jetzt nicht testen, aber ich glaube, $parsers erwartet, dass Sie einen Wert zurückgeben, es sei denn, Sie haben einen Parser-Fehler.
Versuchen Sie, ein return in Ihrem Code hinzuzufügen:

ctrl.$parsers.unshift(function (viewValue) { 
    var noMatch = viewValue != scope.regForm.password.$viewValue; 
    ctrl.$setValidity('noMatch', !noMatch); 
    return viewValue; 
}); 
+0

Sie mir das Leben gerettet :) es funktioniert –

+0

nur zu wissen, warum in reiner AngularJS apps keine Rückkehr benötigt wird und funktioniert? wie in diesem Beispiel: http://jsfiddle.net/thomporter/UZrex/1/ –

Verwandte Themen