push不是函数Angularjs错误

时间:2016-10-24 07:35:12

标签: html angularjs

我是Angularjs的首发,现在就学习它。 我有一个Web应用程序,我想在列表中添加密码。数据来自数据库。 在项目开始时,我将数据存储在json文件中而不是数据库中。在我chaged(数据库数据)后,我收到了以下错误。

我收到了以下代码:

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

这里我得到了应该保存的数据。

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

检查所有字段是否都有输入

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

我实现了数据库中的数据,如下所示:

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

当我启动应用程序并希望使用&#34; Speichern&#34;添加数据时点击我收到错误。

[error image]

我不知道为什么我会得到这个错误,有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

您使用currentPassword代替$scope.currentPassword

更改currentPassword而不是$scope.currentPassword,您就完成了

然后你可能会在没有声明的情况下重新使用$ scope.current_password哈希。

在您的控制器上初始化$scope.current_password = {}

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

答案 1 :(得分:0)

当您引用currentPassword的代码中的其他位置时,您正在将$scope.currentPassword推送到数组,这是对对象的两个唯一引用。

将其更改为此应解决您的错误:       $scope.passwords.push($scope.currentPassword);

答案 2 :(得分:0)

你必须先将它初始化,然后才能将元素推入其中,如:

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