Значения полей, сгенерированные с использованием ng-repeat, не получаются при отправке

Шаблон для отправки формы. На этой странице будет отображаться шаблон формы. Первоначально он показывает TItle, полное имя. При нажатии на ссылку «Добавить теги» создаются новые поля ввода для ввода тегов.

При отправке поле ввода (story.tag) не было включено в RequestPayload.

<form novalidate ng-submit="save()">

    <div>
        <label for="title">Title</label>
        <input type="text" ng-model="story.title" id="title" required/>
    </div>

    <div>
        <label for="firstName">Full Name</label>
        <input type="text" ng-model="story.fullname" id="fullname" required/>
    </div>

    <div ng-controller="Note" >
      <div ng-repeat="story in items ">
        <label>Tag {{$index+1}}:</label>
        <input type="text" ng-model="story.tag" id="tag" required/>
      </div>
      <a ng-click="add()">Add Tags</a>
    </div>


    <button id="save" class="btn btn-primary">Submit Story</button>
</form>

скрипт :- app.js

angular.module("getbookmarks", ["ngResource"])
.factory('Story', function ($resource) {
    var Story = $resource('/api/v1/stories/:storyId', {storyId: '@id'});
    Story.prototype.isNew = function(){
        return (typeof(this.id) === 'undefined');
    }
    return Story;
})
.controller("StoryCreateController", StoryCreateController);


function StoryCreateController($scope, Story) {

   $scope.story = new Story();

   $scope.save = function () {
      $scope.story.$save(function (story, headers) {
         toastr.success("Submitted New Story");
      });
   };
}

//add dynamic forms
 var Note = function($scope){
    $scope.items = [];

    $scope.add = function () {
      $scope.items.push({ 
        inlineChecked: false,
        tag: "",
        questionPlaceholder: "foo",
        text: ""
      });
    };
  }

person Febin m    schedule 08.11.2014    source источник


Ответы (1)


Объект истории внутри ng-repeat находится в другой области. Этот JSFiddle должен делать то, что вы ищете.

<div ng-app>
    <div ng-controller="NoteCtrl">
        <form novalidate ng-submit="save()">
            <div>
                <label for="title">Title</label>
                <input type="text" ng-model="story.title" id="title" required/>
            </div>
            <div>
                <label for="firstName">Full Name</label>
                <input type="text" ng-model="story.fullname" id="fullname" required/>
            </div>
            <div ng-repeat="story in items">
                <label>Tag {{$index+1}}:</label>
                <input type="text" ng-model="story.tag" required/>
            </div> <a ng-click="add()">Add Tags</a>

            <button id="save" class="btn btn-primary">Submit Story</button>
        </form>
        <div ng-repeat="test in items">
            <label>Tag {{$index+1}}: {{test.tag}}</label>
        </div>
    </div>
</div>

Контроллер заметок:

function NoteCtrl($scope) {
    $scope.story = {};
    $scope.items = [];
    $scope.story.tag = $scope.items;

    $scope.add = function () {
        $scope.items.push({
            inlineChecked: false,
            tag: "",
            questionPlaceholder: "foo",
            text: ""
        });
        console.log($scope.story);
    };
}
person niklr    schedule 08.11.2014
comment
Спасибо за ответ. При выполнении, как указано выше, да, он получает все значения поля в консоли, но в RequestPayload он не содержит значений, т.е. пуст. - person Febin m; 09.11.2014