2016-10-24 2 views
1

Im стартер в Angularjs и изучите его сейчас. У меня есть веб-приложение, где я хочу добавить пароль в список. Данные поступали из базы данных. В начале проекта я получил данные в json-файле, а не в базе данных. После того, как я запустил (данные в базе данных), я получил следующую ошибку.push не является функцией Angularjs error

я получил следующий код:

$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'); 

Когда я запустить приложение и хотите добавить данные с щелчок «Speichern» я получаю ошибку.

[error image]

Я не знаю, почему я получаю эту ошибку может кто-нибудь мне помочь?

ответ

1

вы использовали currentPassword вместо $scope.currentPassword,

Изменить currentPassword вместо $scope.currentPassword и вы сделали

Тогда вы можете быть ВЕ $ scope.current_password хэш без объявления.

initialize $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; 
    } 
} 
+0

я изменил его, но ошибка является одна и та же. эта ошибка я получил потому, что я что-то изменил и забыл написать это;). – NiZelooer

+0

принять '$ scope.currentPassword = {}' при запуске контроллера – Sravan

+0

Я изменил, но ошибка такая же. – NiZelooer

0

Вы подталкивают currentPassword в массив, когда в других местах в вашем коде вы ссылаетесь $scope.currentPassword, которые являются два уникальных ссылок на объекты.

Изменение его это должно устранить ошибку: $scope.passwords.push($scope.currentPassword);

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; 
    } 
} 
Смежные вопросы