Я создал следующий пример, таким образом, Вы видите точно, что происходит: http://jsfiddle.net/8t2Ln/101/
То же самое происходит, если я использую ng-опции. У меня есть другая причина того, чтобы сделать его, этот путь, но упрощения примера пропустил ту часть.
Поскольку Вы видите, что это имеет значением по умолчанию две опции. Я отображаю выбранное значение ng-модели рядом с выбором, таким образом, Вы видите, каково это. При использовании главной части для добавления третьей опции, она устанавливает значение к значению той новой опции, как свидетельствуется отображенным значением ng-модели рядом с выбором, но сам выбор не изменяется для показа выбранного правильного значения.
Ниже пример кода в ссылке:
var testApp = angular.module('testApp', ['ngRoute']);
testApp.controller('Ctrl', function ($scope) {
$scope.newInput = '';
$scope.inputDevice = [
{
value: '1',
label: 'input1'
},
{
value: '2',
label: 'input2'
}
];
$scope.selectedDevice = '';
$scope.addType = function () {
var newElem = {
label: $scope.newInput,
value: '3'
};
$scope.inputDevice.push(newElem);
$scope.selectedDevice = newElem.value;
};
});
И вот HTML:
{{ selectedDevice }}
У меня была та же проблема. Что решило, это для меня преобразовывает число в строку. Пример:
$scope.selectedDevice = "" + newElem.value;
У меня была та же проблема выбора не обновление, когда ng-модель обновляется. Я получал значение для ng-модели от функции, которая извлекла объект из массива на основе ключа, пары значения.
В выполнении этого, возвращенный объект имел hashkey свойство $hashKey: "object:115"
, проблема произошла, когда я создал копию объекта с помощью angular.copy, который снял изоляцию с этого 'hashkey' свойства и следовательно не выбрать.
После того, как я реорганизовал код, для получения значения ng-модели после angular.copy, вопрос был решен
ConstructorReviewers: function (oItem) {
this.PERSON_ID = oItem.PERSON_ID;
this.CHAIR_PERSON = oItem.CHAIR_PERSON;
/* // Commented this part and added it to EditItem function
this.oDepartment = CommonFactory.FindItemInArray(vm.oCommittee.arrDepartments, 'NAME', this.DEPARTMENT, 'item');
*/
this.EditItem = function () {
vm.EditItemOriginal = this;
angular.copy(this, vm.EditItem); // After this update the ng-model into vm.EditItem.oTitle object
vm.EditItem.oTitle = CommonFactory.FindItemInArray(vm.oCommittee.arrTitles, 'TITLE', vm.EditItem.TITLE, 'item');
vm.Popup.ShowPopup(true, 'new_edit', Constants.Mentoring.Popup.Edit);
}
}
У меня была подобная проблема, и причина состояла в том, что мой ключ был числом, но при попытке установить другое значение я отправлял строку. Обходное решение в этом случае должно вызвать для устанавливания образцового значения к тому же типу как ключ.
, например:
<select ng-model="model" ng-options="option.{{ key }} as option.{{ label }} for option in options"> <option value="">{{ emptyLabel }}</option> </select>
if (scope.options.length > 0) {
scope.keyType = typeof(scope.options[0][scope.key]);
}
...
if (scope.keyType == 'number') {
scope.model = parseInt(newVal, 10);
} else {
scope.model = newVal;
}