2017-09-29 2 views
0

Ich habe eine Funktion, die ich verwende, um einige Felder im Frontend zu validieren, dies wird mit der ng-click-Direktive aufgerufen. Innerhalb der $ scope.validateAgainstStudent() rufe ich eine andere Funktion getStudentObj (Wert), die eines der 3 Schülerobjekte zurückgeben sollte.Angularjs Kann Eigenschaft von undefined nicht lesen Funktion zurückgeben Objekt

Was ich bisher versucht habe, funktioniert einfach nicht. Der Fehler, den ich bekommen ist Typeerror: kann Eigenschaft ‚vorName‘ undefinierter

$scope.student1 = {}; 
$scope.student2 = {}; 
$scope.student3 = {}; 

//This is being called from the frontend ng-click directive 
$scope.validateAgainstStudent = function(value) { 
      console.log(getStudentObj(value).firstName); 
      if(getStudentObj(value).firstName==null || getStudentObj(value).lastName==null || getStudentObj(value).address==null){ 
       alert('Please fill out all required fields'); 
      } else{ 
       //do something 
      } 
     } 
    }; 

//This should return the student object 
function getStudentObj(value) { 

     if(value==1){ 
      return $scope.student1; 
     } 
     if(value==2){ 
      return $scope.student2; 
     } 
     if(value==3){ 
      return $scope.student3; 
     } 

}; 

ich aber etwas tun lesen konnte, ohne die Hilfe der Funktion getStudentObj (Wert) aber ich werde Endup mit vielen von doppeltem Code, da die Eigenschaften des Student-Objekts gleich sind. d.h Vorname, Nachname ... etc

$scope.student1 = {}; 
$scope.student2 = {}; 
$scope.student3 = {}; 

//This is being called from the frontend ng-click directive 
$scope.validateAgainstStudent = function(value) { 

    if(value==1){ 
      if($scope.student1.firstName==null || $scope.student1.lastName==null || $scope.student1.title==null){ 
       alert('Please fill out all required fields'); 
      } else{ 
       //do something 
      } 
     } 
    if(value==2){ 
      if($scope.student2.firstName==null || $scope.student2.lastName==null || $scope.student2.title==null){ 
       alert('Please fill out all required fields'); 
      } else{ 
       //do something 
      } 
     } 
    if(value==2){ 
      if($scope.student3.firstName==null || $scope.student3.lastName==null || $scope.student3.title==null){ 
       alert('Please fill out all required fields'); 
      } else{ 
       //do something 
      } 
     } 
    }; 
+0

Von Ihrem ersten Bit Code: $ scope.student1 = {}; Dann rufen Sie den Wert getStudentObj (value) auf, der dann student1/2/3 zurückgibt, also wo ist der firstName für dieses Objekt? Das ist wahrscheinlich der Grund, warum es sich beschweren wird ... – rrd

+0

@rrd Die Eigenschaften werden vom Frontend übergeben ng-model = "student1.firstName". Das ist nicht das Problem, wie ich in meinem zweiten Code-Schnipsel erklärt habe - der andere Ansatz funktioniert gut. – user2342259

Antwort

0

Es sieht aus wie die value ist eine der if Aussagen entsprechen. Sie könnten versuchen, console.log hinzuzufügen, um zu sehen, ob Sie das Problem debuggen können.

//This should return the student object 
function getStudentObj(value) { 

     if(value==1){ 
      return $scope.student1; 
     } 
     if(value==2){ 
      return $scope.student2; 
     } 
     if(value==3){ 
      return $scope.student3; 
     } 

     console.log(value); 
     return {}; 

}; 
0

Der Wert, der in getStudentObj eingegeben (Wert) unterscheidet sich von 1, 2 und 3. Aus diesem Grund getStudentObj undefined zurück. Erstellen Sie eine console.log (value) anstelle von console.log (getStudentObj (value) .firstName), um den Wert zu überprüfen.

Verwandte Themen