2015-08-13 7 views
11

undefined Ich bin mit ionischen und ich habe die folgende Ansicht:ng-Modell wird in der Steuerung

<ion-view hide-nav-bar="true" ng-controller="loginController" class="login-view"> 
    <ion-content class="padding"> 

    <div class="row row-center"> 
     <div class="col"> 

     <div id="logo"></div> 

     <form> 
      <div class="list"> 
      <label class="item item-input"> 
       <input type="text" placeholder="Membership No" ng-model="membershipNo"> 
      </label> 
      <label class="item item-input"> 
       <input type="password" placeholder="Password" ng-model="password"> 
      </label> 
      </div> 

      <button class="button button-block button-positive button-login" ng-click="login()"> 
      Login 
      </button> 
     </form> 

     </div> 
    </div> 

    </ion-content> 
</ion-view> 

Und mein Controller:

app.controller('loginController', ['$scope', '$localstorage', 
    function($scope, $localstorage) { 

     $scope.membershipNo; 
     $scope.password; 

     $scope.login = function() { 
      console.log("User logged in with membership no: " + $scope.membershipNo + 
    "\n and password: " + $scope.password); 
     } 

    } 
]); 

Was ich nicht verstehe, ist, dass, wenn Ich klicke auf den Button, die Login-Funktion wird korrekt aufgerufen. Auch wenn ich in der Steuerung gehe und 0123.auf etwas wie "Banana Pancake" setze, aktualisiert sich die Ansicht tatsächlich.

Doch wenn die Login-Funktion tatsächlich ausgeführt wird, heißt es, dass membershipNo und password nicht definiert sind. Ich bin ziemlich neu in Winkel- und Ionic damit ich weiß, dies ist wahrscheinlich einige n00b Fehler ...

+5

Sie die Bindung an einen primitiv. Tu das nicht. http://www.codelord.net/2014/05/10/understanding-angulars-magic-dont-bind-to-primitives/ (Im Wesentlichen wird der Wert von 'membershipNo' nach Wert übergeben, also was geändert wird ist nicht die Referenz im Controller Erstelle ein Objekt, etwa '$ scope.user = {}' und übergebe das 'ng-model =" user.membershipNo "', sonst kann Angular keine Daten an den Controller zurücksenden ...) – DRobinson

+0

möglich Duplikat von [Ng-Modell aktualisiert den Controller-Wert nicht] (http://StackOverflow.com/questions/12618342/ng-model-does-not-update-controller-value) – DRobinson

+0

Das Problem ist woanders vielleicht, weil es scheint hier gut zu funktionieren http://plnkr.co/edit/L0ip3gShFcteiFdUBtlR?p = Vorschau –

Antwort

32

ich genau das gleiche Problem hatte vor kurzem und das ist wahrscheinlich eine Lösung: https://stackoverflow.com/a/22768720/552936

Modified Zitat:

"Wenn Sie ng-Modell verwenden, müssen Sie dort einen Punkt haben"
Machen Sie Ihr Modell auf eine object.property und Sie werden gut gehen.

-Controller

$scope.formData = {}; 
$scope.login = function() { 
    console.log("User logged in with membership no: " + $scope.formData.membershipNo + 
    "\n and password: " + $scope.formData.password); 
} 

Vorlage

<input type="text" placeholder="Membership No" ng-model="formData.membershipNo"> 
<input type="password" placeholder="Password" ng-model="formData.password"> 
+1

Obwohl dies das Problem lösen wird, gibt es nicht wirklich eine Antwort, warum es an erster Stelle fehlgeschlagen ist. – skubski

+1

Genau wie @DRobinson sagte und wie Ihr Beispiel oben zeigt, habe ich MitgliedschaftNo und Passwort und wickelte sie in ein 'Anmeldeinformationen' Objekt und jetzt magisch alles funktioniert .. aber WARUM !? – Tiwaz89

+0

Ah, vergiss es, er erklärte es oben .. – Tiwaz89

1

Sie benötigen $ scope Variablen wie dies in Ihrem Controller zu definieren:

$scope.membershipNo = ''; 
$scope.password = ''; 

So Ihre Controller würde wie folgt aussehen:

app.controller('loginController', ['$scope', '$localstorage', 
    function($scope, $localstorage) { 

    $scope.membershipNo = ''; 
    $scope.password = ''; 
    $scope.login = function() { 
    console.log("User logged in with membership no: " + $scope.membershipNo + 
    "\n and password: " + $scope.password); 
    } 

}]); 
+0

Ich habe das versucht, dann druckt die Funktion nur leere Werte aus und nicht wirklich, was der Benutzer eingegeben hat ...? – Tiwaz89

3

Bitte überprüfen Sie diesen Code Dies ist für mich gearbeitet wird:

<div class="row row-center"> 
    <div class="col"> 

    <div id="logo"></div> 

    <form> 
     <div class="list"> 
     <label class="item item-input"> 
      <input type="text" placeholder="Membership No" ng-model="data.membershipNo"> 
     </label> 
     <label class="item item-input"> 
      <input type="password" placeholder="Password" ng-model="data.password"> 
     </label> 
     </div> 

     <button class="button button-block button-positive button-login" ng-click="login()"> 
     Login 
     </button> 
    </form> 

    </div> 
</div> 

und in your-Controller:

app.controller('loginController', ['$scope', 
    function($scope) { 
    $scope.data={}; 
    $scope.login = function() { 
    console.log("User logged in with membership no: " + $scope.data.membershipNo + 
    "\n and password: " + $scope.data.password); 
    } 

}]); 
+1

das funktioniert und gute Antwort – Bhupinder

1

Hey Jean,Have a look of it your code is working here

 <ion-view ng-app="app" hide-nav-bar="true" ng-controller="loginController" class="login-view"> 
     <ion-content class="padding"> 

     <div class="row row-center"> 
      <div class="col"> 

      <div id="logo"></div> 

      <form> 
       <div class="list"> 
       <label class="item item-input"> 
        <input type="text" placeholder="Membership No" ng-model="membershipNo"> 
       </label> 
       <label class="item item-input"> 
        <input type="password" placeholder="Password" ng-model="password"> 
       </label> 
       </div> 

       <button class="button button-block button-positive button-login" ng-click="login()"> 
       Login 
       </button> 
      </form> 

      </div> 
     </div> 

     </ion-content> 
    </ion-view> 


var app= angular.module("app",[]); 
    app.controller('loginController', ['$scope', 
     function($scope, $localstorage) { 

     $scope.membershipNo; 
     $scope.password; 
     $scope.login = function() { 
     alert("User logged in with membership no: " + ($scope.membershipNo || '') + 
     "\n and password: " + ($scope.password || '')); 
     } 

    }]); 
+0

könnten Sie eine Erklärung hinzufügen, die dem "Fragesteller" hilft zu verstehen, was Sie getan haben und warum - damit wir alle daraus lernen können – ry8806

+0

Hi Ry8806, Es ist ein Konzept der typischen Vererbung. Wie die @mbajur in seinem Beispiel machen, indem sie ein Objekt daraus machen. Es ist ein Muster in Javascript, das angularjs verwendet. Wenn die in Ihnen verwendeten Regeln wie die Realtion zwischen untergeordneten Bereichen und übergeordneten Bereichen ordnungsgemäß verwaltet werden, sollte es keine Probleme geben. Andernfalls erhalten Sie diese Art von Problem in angularjs der Verlust des Bereichs Eigenschaftenwert. Aber wenn Sie sehen können, ich mache nur einen einfachen Controller dann funktioniert es richtig. Und ich weiß nicht genau, was Jean will. Aber im Code-Snippet fügt er hinzu, dass es kein Problem gibt. –

0
$scope.user = {}; 
$scope.submitForm = function (isValid) { 
    if (($scope.user.name || '').length > 0){ //Code } 
} 
Verwandte Themen