Атрибут value
возвращает строки, а value.id
- это число.Используйте ng-value
без фигурных скобок {{ }}
интерполяция.
<select ng-model="form.language_id" name="language_id" required >
<option ng-repeat="(key,value) in langs" ̶v̶a̶l̶u̶e̶=̶"̶{̶{̶v̶a̶l̶u̶e̶.̶i̶d̶}̶}̶
ng-value="value.id">
{{value.languageTitle}}
</option>
</select>
Из документов:
В общем, соответствие между моделью и параметром оценивается путем строгого сравнениязначение модели по отношению к значению доступных параметров.
Если вы устанавливаете значение параметра с атрибутом value
или textContent, значение всегда будет string
, что означает, что значение моделитакже должна быть строкой.В противном случае директива select
не может соответствовать им правильно.
Чтобы привязать модель к нестроковому значению, вы можете использовать одну из следующих стратегий:
- the
ngOptions
директива (select
) - директива
ngValue
, которая позволяет произвольным выражениям принимать значения параметров ( Пример ) - model $ parsers/ $ форматеры для преобразования строкового значения ( Пример )
var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {
$scope.form={"language_id":2};
$scope.langs=[
{"id":1,"languageTitle":"test1"},
{"id":2,"languageTitle":"test2"},
{"id":3,"languageTitle":"test3"},
]
});
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="myApp" ng-controller="myCtrl">
<select ng-model="form.language_id" name="language_id" required >
<option ng-repeat="(key,value) in langs" ng-value="value.id">
{{value.languageTitle}}
</option>
</select>
</body>
Для получения дополнительной информации см.