2016-06-09 6 views
1

Ich habe den folgenden HTML-Code:Angular/Ionic: Kein Zugriff Wert in HTML-Eingabefeld

 <div class="list"> 
      <label class="item item-input"> 
       <input id="email" ng-model="email" type="text" placeholder="Email Address"> 
      </label> 
      <br> 
      <center> 
      <button class="button button-positive" ng-click="getData();"> Test </button> 
      </center> 
     </div> 

und den folgenden Winkel Code:

$scope.getData = function() { 
     var emailadd = document.getElementById('email'); 
     var url = "http://172.16.99.138/sendemail.php?emailaddress="+emailadd; 
     console.log(url); 
    }; 

aber wenn ich versuche, das laufen Code sagt die Konsole, dass es die Variable nicht finden kann. Würde die Anleitung hier schätzen.

+0

'$ Umfang. E-Mail? – Pogrindis

+0

Können Sie bitte – user1650487

+0

ausarbeiten Verwenden Sie nicht die Dom-Elemente für Bindungen wie diese, das ist der Hauptpunkt der Verwendung von eckigen, 2-Wege-Bindung .. – Pogrindis

Antwort

2

Hinweis: Ihr in Frage stehender Code ist sowieso falsch, da document.getElementById('email') Sie das dom-Element erhält, das ist nicht das value() des Elements.

Noch sollte man dies die "Angular Way" tun:

Sie müssen wie so das Modell in der Controller definieren:

$scope.email = { 
    text: '' 
    }; 

Dann können Sie in der HTML-binden wie so :

<input type="email" name="input" ng-model="email.text" required> 

Dann können Sie die $scope.email in Ihrer Methode verwenden:

$scope.getData = function() { 
    var url = "http://172.16.99.138/sendemail.php?emailaddress="+$scope.email.text; 
    console.log(url); 
}; 

ng-model Documentation

+0

Hat sehr gut funktioniert, danke – user1650487

+0

Es ist nicht notwendig, ich denke, um ein Objekt zu erstellen, nur um den Eingangswert zu fangen.Angular ist es nützlicher und schöner :) –

+0

@FationHadri nehme an, der Benutzer möchte Speichern Sie das Observable anderswo, oder hat er komplexe Objekte, oder hat er den Wert anderswo in einem Service aufgelöst, muss er dann mehr am Front-View-Ende verwalten. Es ist in der Regel eine gute Methode, weniger in der Ansicht zu halten. Aber Ihre Antwort funktioniert auch perfekt für das OP-Problem. – Pogrindis

1

Verwenden Sie diese Art und Weise von Daten in AngularJS verbindlich, übergeben E-Mail als Parameter in der Funktion getData()

<div class="list"> 
      <label class="item item-input"> 
       <input id="email" ng-model="email" type="text" placeholder="Email Address"> 
      </label> 
      <br> 
      <center> 
      <button class="button button-positive" ng-click="getData(email);"> Test </button> 
      </center> 
     </div> 

Und in Ihrem Controller

$scope.getData = function(email) { 
     // var emailadd = document.getElementById('email');don't use this 
     var url = "http://172.16.99.138/sendemail.php?emailaddress="+email; 
     console.log(url); 
    };