2016-10-24 2 views
1

Ich bin ein Starter in Angularjs und lerne es jetzt. Ich habe eine Webanwendung, wo ich ein Passwort zu einer Liste hinzufügen möchte. Die Daten stammen aus einer Datenbank. Zu Beginn des Projekts habe ich die Daten in einer JSON-Datei und nicht auf der Datenbank. Nachdem ich gecheckt habe (Daten in der Datenbank) habe ich den folgenden Fehler bekommen.Push ist keine Funktion Angularjs Fehler

Ich habe den folgenden Code:

$scope.savePassword = function() { 
    if ($scope.currentPassword.Id == null) { 
     $scope.passwords.push($scope.currentPassword); 
     $scope.isShownEdit = false; 
    } else { 
     var index = $scope.passwords.findIndex(function (item) { 
      return item.Id == $scope.currentPassword.Id; 
     }); 
     $scope.passwords[index] = $scope.currentPassword; 
     $scope.isShownEdit = false; 
    } 
} 

Hier i die Daten einsehen, die gespeichert werden sollen.

<div> 
    <!-- Name des Passwortes --> 
    <div class="cClearFloat cInputSpace"> 
     <input placeholder="Name" maxlength="12" ng-model="currentPassword.Name"> 
    </div> 
    <!-- Passwort des Passwortes --> 
    <div class="cClearFloat cInputSpace"> 
     <input placeholder="Passwort" maxlength="12" ng-model="currentPassword.Passwort"> 
    </div> 
    <!-- Beschreibung des Passwortes --> 
    <div class="cClearFloat cInputSpace"> 
     <input placeholder="Beschreibung" maxlength="25" ng-model="currentPassword.Beschreibung"> 
    </div> 
    <!-- Liste mit den kategorien --> 
    <div class="cClearFloat cInputSpace"> 
     <div class="divSmall"> 
      <label class="inputDropdownPlaceholder">Kategorien</label> 
       <div class="divOptions" ng-repeat="item in categories.Items"> 
        <label class="labelDropDown"><input type="checkbox" class="inputDropDown" ng-model="item.isChecked" ng-checked="checkedCategory(item)" ng-init="item.isChecked = checkedCategory(item)" ng-change="changedCategory(item)">{{item.Name}}</label><br> 
       </div> 
     </div> 
       <div class="cClearFloat cButtons"> 
        <button class="cButtonSpeichern" ng-click="showAlertPassword()">Speichern</button> 
        <button class="cButtonAbbrechen" ng-click="isShownEdit = false">Abbrechen</button> 
       </div> 
    </div> 
</div> 

überprüfen, ob alle Felder eine Eingabe bekam

$scope.showAlertPassword = function() { 
    if ($scope.currentPassword.Name && $scope.currentPassword.Passwort && $scope.currentPassword.Beschreibung && $scope.currentPassword.Category.length) { 
     $scope.savePassword(); 
    } else { 
     alert("Bitte füllen Sie alle Felder korrekt aus!", "Fehler"); 
    } 
} 

ich die Daten aus der Datenbank wie folgt implementieren:

$scope.passwords = hateoasService.call('http://localhost:20670/passwords'); 

Wenn ich die Anwendung zu starten und die Daten hinzufügen wollen mit Beim "Speichern" klicke ich auf den Fehler.

[error image]

Ich weiß nicht, warum ich diese Fehlermeldung erhalten, kann mir jemand helfen?

Antwort

1

verwendet man currentPassword statt $scope.currentPassword,

ändern currentPassword statt $scope.currentPassword und Sie

Dann getan Sie, ohne es zu deklarieren $ scope.current_password Hash reffering werden könnte.

initialisieren $scope.current_password = {} bei Ihrem Controller starten.

$scope.savePassword = function() { 
    if ($scope.currentPassword.Id == null) { 
     $scope.passwords.push($scope.currentPassword); 
     $scope.isShownEdit = false; 
    } else { 
     var index = $scope.passwords.findIndex(function (item) { 
      return item.Id == $scope.currentPassword.Id; 
     }); 
     $scope.passwords[index] = $scope.currentPassword; 
     $scope.isShownEdit = false; 
    } 
} 
+0

ich es geändert, aber der Fehler ist die gleich. Diesen Fehler habe ich, weil ich etwas verändert habe und vergessen habe, es zu schreiben;). – NiZelooer

+0

nehmen Sie '$ scope.currentPassword = {}' beim Starten des Controllers – Sravan

+0

Ich habe modifiziert, aber der Fehler ist der gleiche. – NiZelooer

0

Sie drängen currentPassword auf das Array, wenn an anderer Stelle in Ihrem Code Sie $scope.currentPassword verweisen, die zwei einzigartige Verweise auf Objekte sind.

Ändern sie dies sollte Ihre Fehler beheben: $scope.passwords.push($scope.currentPassword);

0

Sie müssen es zuerst initialisieren, dann, nachdem Sie Element in es mögen schieben kann:

$scope.passwords = [] // in case of array, | do {} in case of json. 

$scope.savePassword = function() { 
    if ($scope.currentPassword.Id == null) { 
     $scope.passwords.push($scope.currentPassword); 
     $scope.isShownEdit = false; 
    } else { 
     var index = $scope.passwords.findIndex(function (item) { 
      return item.Id == $scope.currentPassword.Id; 
     }); 
     $scope.passwords[index] = $scope.currentPassword; 
     $scope.isShownEdit = false; 
    } 
} 
Verwandte Themen