Я думаю, это потому, что
в вашем ng-options
при выборе опции, выбранное значение является объектом
EX: если вы выбрали первый вариант, то значение модели объекта, который первый элемент в $scope.rooms
({id: 1, name: "Room 1"}
).
Объекты являются ссылочными типами данных. Так что он делает, если объекты создаются один раз, то все его использование указывает на этот объект. взгляните на это article.
Таким образом, выбранное вами значение является объектом, который является ссылочным типом. В вашем случае у вас есть два независимых объекта для $scope.reservation.room
и {id: 2, name: "Room 2"}
, который находится в массиве rooms
. обратите внимание, что они находятся в разделенных слотах памяти.
В вашем рабочем случае оба $scope.reservation.room
и {id: 2, name: "Room 2"}
, который находится в rooms
массиве, указывающий на тот же слот памяти, потому что у вас есть равняется два, как $scope.reservation.room = $scope.rooms[1];
Это означает, что $scope.reservation.room
& $scope.rooms[1]
оба указывают на тот же объект в памяти.
Чтобы решить эту проблему, вы можете сделать что-то отличное от своего рабочего решения.
Изменение ng-repeat
следующим
...ng-options="room.id as room.name for room in rooms"...
и изменить ng-model
....ng-model="reservation.id"....
это будет выбрать id
опции в качестве выбранного значения для EX, если вы выбираете первый вариант, то значение модели будет 1
, которое является id
первого варианта.
В этом случае выбранные значения модели являются примитивными (like 1,2,3..
) данными типа, тогда он не собирается искать объекты в памяти, а получает значение стека и проверяет значения параметров и выбирает правильный.
вот DEMO это сначала выберет второй вариант.
---------------------------------------------- --- РЕЗЮМЕ -------------------------------------------- -----
Если выбранное значение модели - object
, то оно проверит адрес памяти выбранного объекта и всех объектов $scope.rooms
и проверит, есть ли соответствующий элемент и выберите соответствующий параметр, если один найден. если никто не найдет, то ничего не выберет.
Если значения модели примитивны, как 1,2,3..
, он будет искать значение и проверять, есть ли подходящие option
value
, если он найден, он выберет эту опцию.
Это нормально, но как мне получить автоматическое связывание для моего второго варианта использования, когда я назначаю значение объекта «резервирования» посредством возврата вызова $ http? – kshep92
С вашей конфигурацией элемента '
Существует вероятность, что это может быть решение, но если вы посмотрите на [мои изменения] (http://jsfiddle.net/x32b1jf5/ 4 /) вы увидите, что использование поля выбора только переключает один атрибут модели (id), а не всю модель. Вы подходите, исправляете проблему сломанных привязок, когда я изменяю всю модель резервирования. Дайте мне немного времени, чтобы исследовать это дальше или получить еще несколько ответов, прежде чем я приму это. – kshep92