2016-05-11 8 views
0

Mein Controller ist zu groß, daher wurde entschieden, ihn auf mehrere Funktionen aufzuteilen. Jetzt sehen Funktionen keine Eingabewerte mehr. Können Sie mir raten, wie Sie dieses Problem lösen können?Angular: Eingabewerte in js-Funktion erhalten

angular.module("sampleApp", []) 
    .controller("defaultCtrl", function ($scope) { 

     $scope.addNewUser = function (userDetails, isvalid) { 
      doLogin(); 
     } 

    }); 

var doLogin = function(userDetails, isvalid) { 
      if (isvalid) { 
       $scope.message = userDetails.name + " " + userDetails.email; 
      } 
      else { 
       $scope.message = "Error"; 
       $scope.showError = true; 
      } 
} 

http://plnkr.co/edit/Rv6dqTECeD62HA1SgDM9?p=preview

Antwort

0

Sie Ihre Funktion außerhalb der Steuerung geschrieben haben, daher ist die $scope innerhalb doLogin Funktion nicht zur Verfügung. Abgesehen davon haben Sie die Werte userDetails und isvalid Werte nicht an doLogin übergeben.

Ersetzen Sie den Code mit diesem:

angular.module("sampleApp", []) 
    .controller("defaultCtrl", function ($scope) { 
     $scope.addNewUser = function (userDetails, isvalid) { 
      doLogin(userDetails, isvalid); 
     } 
     var doLogin = function(userDetails, isvalid) { 
      if (isvalid) { 
       $scope.message = userDetails.name + " " + userDetails.email; 
      } 
      else { 
       $scope.message = "Error"; 
       $scope.showError = true; 
      } 
    } 
}); 
3

Während Sie Funktion aufrufen, Sie Parameter

$scope.addNewUser = function (userDetails, isvalid) { 
    doLogin(userDetails, isvalid,$scope); 
} 

var doLogin = function(userDetails, isvalid, $scope) { 
    //... 
} 

http://plnkr.co/edit/G66gFmJVhiXljyxgLDLP?p=preview

bearbeiten passieren sollte: Benutzername Länge Update doLogin Funktion erhalten:

var doLogin = function(userDetails, isvalid, $scope) { 
       if (userDetails) 
        console.log(userDetails.name.length) 
       //.. 
    }  
+0

Noch eine Frage: Wie bekomme ich userDetails.name 'Länge? – kipris

+0

für diese, siehe bearbeiten –

+0

Fehler erhalten: Kann Eigenschaft 'Länge' von undefined nicht lesen – kipris

2

Sie haben den Controller in mehrere Funktionen aufgeteilt. Jedoch

var doLogin = function(userDetails, isvalid) { 
      if (isvalid) { 
       $scope.message = userDetails.name + " " + userDetails.email; 
      } 
      else { 
       $scope.message = "Error"; 
       $scope.showError = true; 
      } 
} 

ist aus dem $ Umfang des Controllers

"defaultCtrl"

Also, wenn Sie kleinere Controller haben möchten Sie sie mehrere Controller und kommunizieren mit einer Winkel Fabrik haben kann.

Um ehrlich zu sein. Ich denke, Sie sollten den gleichen Controller verwenden, um alle mit Ihrem Login-Formular verbundenen Sachen zu "kontrollieren".

+0

Eine weitere Frage: Wie kann ich userDetails.name 'Länge erhalten ? – kipris

+0

'userDetails.name.length' – tufac2

Verwandte Themen