2017-02-10 2 views
1

Meine Form in Angular Js ist wie folgt.Button senden ist nicht deaktiviert in AngularJs

<form ng-submit="doLogin(loginForm.$valid);" novalidate> 
    <input type="text" name="EmailAddress" ng-model="loginForm.EmailAddress" required/> 
    <input type="password" name="Password" ng-model="loginForm.Password" required/> 
    <button type="submit" ng-disabled="loginForm.$invalid"> 
     Login 
    </button> 
</form> 

Ich habe sowohl Textbox nach Bedarf ein und nach wie vor auf dem Formular Last, Taste nicht deaktiviert zeigt aber Code ist schon da ng-disabled="loginForm.$invalid". Fehle ich etwas?

+1

Ja - Eine 'namen =„Loginform“' auf dem Formularelement –

+0

Sie verwechseln das Modell (dh Ihr loginForm-Objekt, das die eingegebene E-Mail-Adresse und das eingegebene Passwort enthält) mit dem Formular-Controller, der von angular erstellt wurde und die Felder $ valid, $ invalid usw. enthält. Verwenden Sie nicht den gleichen Namen für diese zwei verschiedenen Dinge. Fügen Sie Ihrem Formular 'name =" myForm "' hinzu und verwenden Sie 'ng-disabled =" myForm. $ Invalid "'. –

Antwort

1

Du verwechselst das Modell (reine Daten, dh Ihre Loginform-Objekt, um die eingegebene E-Mail-Adresse und das eingegebene Passwort enthält) , mit dem Formularcontroller, der von angular erstellt wurde und die Felder $ valid, $ invalid usw. enthält.

Verwenden Sie nicht denselben Namen für diese zwei verschiedenen Dinge. Ich würde benennen Sie Ihr Objekt credentials (da es keine Form ist), und loginForm für die tatsächliche Form verwenden würde (das Name-Attribut):

$scope.credentials = {}; 

---- 

<form name="loginForm" ng-submit="doLogin(loginForm.$valid);" novalidate> 
    <input type="text" name="EmailAddress" ng-model="credentials.EmailAddress" required/> 
    <input type="password" name="Password" ng-model="credentials.Password" required/> 
    <button type="submit" ng-disabled="loginForm.$invalid"> 
     Login 
    </button> 
</form> 
1

Versuchen Sie hier

<body data-ng-app="testapp"> 
<div data-ng-controller="testCtrl"> 
    <h1>Test {{name}}!!</h1> 

    <form name="loginForm" action="login" novalidate> 
     <input type="email" name="email" ng-model="email" placeholder="email" required/> 
     <input type="password" name="password" ng-model="passowrd" placeholder="password" required/> 
     <button type="submit" ng-disabled="loginForm.$invalid">Login</button> 
     <p ng-show="loginForm.$invalid">Please fix your form.</p> 
     <p ng-show="loginForm.email.$invalid">Please fix your email.</p> 
     <p ng-show="loginForm.password.$invalid">Please fix your password.</p> 
    </form> 
</div> 
<script> 
    var testapp = angular.module('testapp', []); 
    var testCtrl = function($scope) { 
     $scope.name = 'validation'; 
    }; 
</script> 

KREDITE suchen: @Davin Tryon Angular JS form validation does not seem to work

+2

Das direkte Binden an den Bereich, anstatt an Felder eines Objekts zu binden, ist eine schlechte Übung. Es wird zu subtilen Fehlern führen, wenn eine der Eingaben beispielsweise in einer ng-if- oder ng-Wiederholung enthalten ist, die ihren eigenen Gültigkeitsbereich erzeugt. –

Verwandte Themen