Я новичок в угловых, и я пытаюсь сделать поле формы добавить символ, но я делаю что-то не так

Вот моя HTML-форма с угловым

<form class="add_character" ng-submit="characterController.addCharacter(characters)">
          <input ng-model="addCharacterCtrl.character.name" type="text">
          <input ng-model="addCharacterCtrl.character.last_name" type="text">
          <input ng-model="addCharacterCtrl.character.age" type="text">
          <textarea ng-model="addCharacterCtrl.character.history" name="" id="" cols="30" rows="10"></textarea>
          <input type="submit">
      </form>

А вот мой контроллер с моей функцией добавления символов:

app.controller('CharacterController', function() {
this.characters = personages;


this.addCharacter = function(newCharacter){
  addCharacter.push(this.characters);

  this.addCharacter = [];
};
  });



  var personages = [
{
  name: 'Character',
  last_name: 'character',
  age: 21,
  history: 'character info',
},
{
  name: 'Character2',
  last_name: 'character',
  age: 44,
  history: 'character info',
}


  ];

И это ошибка, которую я получаю:

Blockquote angular.js: 13920 TypeError: Невозможно прочитать свойство 'push' undefined в Object.addCharacter (addCharacter.js: 11) в fn (eval при компиляции (angular.js: 14817),: 4: 394) в b (угловой .js: 15906) в e (angular.js: 25885) в m. $ eval (angular.js: 17682) в m. $ apply (angular.js: 17782) в HTMLFormElement. (angular.js: 25890) на Sf (angular.js: 3497) на HTMLFormElement.d (angular.js: 3485)

Я надеюсь, что кто-то может мне помочь

0
Jessep 7 Дек 2016 в 16:56

3 ответа

Лучший ответ

Как уже было сказано ранее, ошибка, которую вы получаете, связана с тем, что вы пытаетесь вставить объект в другой объект, поэтому измените его на массив

Кроме того, ваша разметка и код немного преувеличены для того, что требуется, вот упрощенная версия:

app.controller('CharacterController', function($scope) {

  // The initial list of characters
  // Here I declare the personages as a scope variable as I am listing them in the view (see plunker below), but you could just declare it as a normal variable
  $scope.personages = [ 
    { name: 'Character', last_name: 'character', age: 21, history: 'character info'},
    { name: 'Character2', last_name: 'character', age: 44, history: 'character info'}
  ];

  // An object to hold the new character data, use this in your form model
  $scope.newCharacter = {};

  // The form submit function which receives its model
  $scope.addCharacter = function(character) {
    $scope.personages.push(character);
  }
});

<form class="add_character" ng-submit="addCharacter(newCharacter)">
      <input ng-model="newCharacter.name" type="text">
      <input ng-model="newCharacter.last_name" type="text">
      <input ng-model="newCharacter.age" type="text">
      <textarea ng-model="newCharacter.history" name="" id="" cols="30" rows="10"></textarea>
      <input type="submit">
    </form>

Предварительный просмотр здесь:

https://plnkr.co/edit/iDVPdKm7d96XR1Sk6uQh?p=preview

1
LGLab 7 Дек 2016 в 14:45

Вы должны сделать addCharacter и Array похожими на [], а не Object похожими на {}.

Итак напишите:

this.addCharacter = [];

Вместо:

this.addCharacter = {};
2
Inbar Azulay 7 Дек 2016 в 14:00

Вот несколько вещей, которые я вижу:

this.addCharacter = {};

Вы инициализировали addCharacter как объект.

this.addCharacter = function (addCharacter) {addCharacter.push (this.personages); } ;

Затем вы переопределяете его как функцию.

addCharacter.push ( this.personages ) ;

Наконец, вы пытаетесь использовать Array.push для вставки символа в объект. Кроме того, вы используете то же имя переменной в сигнатуре метода для addCharacter.

1
Gregg 7 Дек 2016 в 14:06