Я столкнулся со странной проблемой при использовании ng-options с AngularJS.
Мой сценарий довольно прост:
- Привяжите значение с помощью ng-model к выбранной опции
- Загрузите значения «выбрать» из бэкэнда
- Привяжите загруженные значения к 'select'
Мои объекты, загруженные из бэкэнда, представляют собой ключ/значение, например:
{
Value: "my_value",
Name: "my_name"
}
И все работает нормально... Пока имя и значение не совпадают. Тогда angular больше не будет корректно связывать выбранное значение.
Я создал этот плункер: https://plnkr.co/edit/tUBXIpMTBAHK2Xh8aDu6?p=preview Чтобы продемонстрировать проблему.
Мой контроллер:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope, $timeout) {
$scope.name = 'World';
$timeout(function(){
$scope.values = [
{ Name: "Accepted", Value: "Accepted" },
{ Name: "Not accepted", Value: "NotAccepted" },
{ Name: "Not at all accepted", Value: "NotAtAllAccepted" }
];
}, 2000);
$scope.selectedValue = "Accepted";
//$scope.selectedValue = "NotAccepted";
//$scope.selectedValue = "NotAtAllAccepted";
});
Если выбранное значение в примере плунжера установлено на «Принято», оно не будет работать. Но если выбранное значение установлено на какое-то другое значение - тогда работает нормально.
И мой HTML:
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="[email protected]" src="https://code.angularjs.org/1.3.20/angular.js" data-semver="1.3.20"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<p>Hello {{selectedValue}}!</p>
<select ng-model="selectedValue" ng-options="orderStatus.Value as orderStatus.Name for orderStatus in values"></select>
</body>
</html>
Кто может просветить меня по этому поводу?
Спасибо!
ОБНОВЛЕНИЕ
Похоже, он отлично работает в Firefox. Но в Chrome и IE проблема все еще возникает.