2015-08-13 10 views
11

Używam jonowe i mam następujący pogląd:ng-model jest zdefiniowana w kontrolerze

<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> 

i mój Kontroler:

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); 
     } 

    } 
]); 

Co ja nie rozumiem, jest to, że kiedy Klikam przycisk, funkcja logowania jest wywoływana poprawnie. Ponadto, jeśli w kontrolerze przejdę i ustawię $scope.membershipNo na coś takiego jak "Bananowy naleśnik", widok faktycznie się zaktualizuje.

Jednak kiedy funkcja logowania rzeczywiście działa, mówi, że membershipNo i hasło są niezdefiniowane. Jestem całkiem nowy, kątowe i jonowe tak wiem, że to pewnie jakiś n00b pomyłka ...

+5

Ty wiązania się prymitywne. Nie rób tego. http://www.codelord.net/2014/05/10/understanding-angulars-magic-dont-bind-to-primitives/ (Zasadniczo wartość 'memberNo' jest przekazywana według wartości, więc to, co się zmienia, jest nie odniesienia w kontrolerze.Ztwórz obiekt, coś jak '$ scope.user = {}' i przekazać, że 'ng-model =" user.membershipNo "', w przeciwnym razie Angular nie może wysłać danych z powrotem do kontrolera ...) – DRobinson

+0

możliwy duplikat [modelu Ng nie aktualizuje wartości kontrolera] (http://stackoverflow.com/questions/12618342/ng-model-does-not-update-controller-value) – DRobinson

+0

Problem może być gdzieś indziej, ponieważ Wydaje się działać dobrze tutaj http://plnkr.co/edit/L0ip3gShFcteiFdUBtlR?p = preview –

Odpowiedz

32

miałem dokładny ten sam problem niedawno i to prawdopodobnie rozwiązanie: https://stackoverflow.com/a/22768720/552936

Modified cytat:

"Jeśli używasz NG-modelu, trzeba mieć kropkę w środku"
Spraw, aby Twój model wskazywał na object.property, a będziesz gotowy do pracy.

Controller

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

Szablon

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

Mimo że to rozwiąże problem, tak naprawdę nie dostarcza odpowiedzi, dlaczego w pierwszej kolejności się nie udało. – skubski

+1

Tak jak @DRobinson powiedział i jak twój przykład pokazuje powyżej, wziąłem membershipNo i hasło i opakowałem je w obiekt "referencji" i teraz magicznie wszystko działa ... ale DLACZEGO !? – Tiwaz89

+0

Ach, nieważne, wyjaśnił to powyżej .. – Tiwaz89

1

Trzeba zdefiniować $ zakres zmienne jak to w kontrolerze:

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

więc kontroler będzie wyglądać następująco:

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

Próbowałem tego, a następnie funkcja wypisuje tylko puste wartości, a nie to, co użytkownik wprowadził ...? – Tiwaz89

3

Proszę sprawdzić ten kod to pracował dla mnie:

<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> 

oraz w regulator:

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

to działa i dobra odpowiedź – 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

czy możesz dodać wyjaśnienie pomagające "pytającemu" zrozumieć, co zrobiłeś i dlaczego - abyśmy wszyscy mogli się z niego uczyć – ry8806

+0

Cześć Ry8806, Jest to pojęcie typowego dziedziczenia. Jak @mbajur robi w swoim przykładzie, robiąc z tego obiekt. Jest to wzorzec w javascript używany przez angularjs. Jeśli używane w tobie heirarchie identyfikują się między obszarami potomnymi a celami nadrzędnymi, to nie powinno to być problemu. W przeciwnym razie dostaniesz tego typu problem w angularjs utraty wartości właściwości zakresu. Ale jeśli widzisz, że zrobiłem prosty kontroler, to działa poprawnie. I nie wiem dokładnie, co chce zrobić Jean. Ale w fragmencie kodu dodał, że nie ma problemu. –

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