Динамический ввод для добавления объекта в массив в angularjs

<div ng-repeat="class in classses">
    <p>{{class.className}}</p>
    <form novalidate>
        <div ng-repeat="studentInput in class.students track by $index">
            <input type="text" ng-model="studentInput[$index]" typeahead="student as (student.lastName + ', ' + student.firstName) for student in findStudents($viewValue)"/>
        </div>
        <button type="button" ng-click="addStudent(class)">Add Student</button>
    </form>
</div>

В контроллере у меня есть:

$scope.addStudent = function(class){
    class.students.push({});
}

Я использую typeahead из угловой начальной загрузки, поэтому он возвращает объекты учеников, которые я затем хочу добавить в массив учеников любого класса, в котором находится форма. Данные представляют собой набор объектов класса, каждый из которых имеет свойство студентов, которое представляет собой массив объектов студентов. В этот момент объект студента добавляется к другому объекту. Так что, похоже, [0:{firstName: "first", lastName: "last", ...}] вместо [{firstName: "first", lastName: "last", ...}]

Это хороший способ сделать это и почему он вкладывает объект в объект?


person user3321348    schedule 30.01.2015    source источник


Ответы (1)


Это объект в объекте из-за природы Javascripts, он передает объект как «копию ссылки». Если он изменит сам объект, это изменение будет сделано только в области (Javascript, а не AngularJs) функции. Вне этой функции ваши значения вообще не изменятся. Если вы измените поля этого объекта, они будут постоянными и за пределами вашей функции. Хорошее описание проходит ли Javascript ссылка?

person chillix    schedule 30.01.2015