我的目标是生成一个选择列表,其中选项值设置为我的一个对象属性。通过绑定选项将轨道添加到ng-options指令时,会创建一个未知的选项元素,它是唯一一个显示所选的选项。此行为是在角度v1.3(这是我使用的版本)。在v1.4中,它仍然会创建未知项目,但会更改显示以显示不同的选定项目。在这两种情况下都不会将下拉列表的初始状态设置为与模型值对应。
ng-options Track By example v1.3
<body>
<script>
angular.module('plunker', [])
.controller("MyCntrl", function($scope) {
$scope.myColor = "rd"; // red
$scope.colors = [
{name:'black', code:'bk'},
{name:'white', code:'wh'},
{name:'red', code:'rd'},
{name:'blue', code:'bl'},
{name:'yellow', code:'yl'}
];
});
</script>
<div ng-controller="MyCntrl">
<select ng-model="myColor" ng-options="color.code as color.name for color in colors track by color.code"></select><br>
<hr/>
<span>Currently selected: {{myColor}}</span>
</div>
</body>
在v1.4中,它仍然没有设置初始状态,但在选择新值时,它将改变显示。我觉得很奇怪,这不起作用,并且它不是一个问题。
如果您想知道,我们希望这样,以便选项值是我们的测试自动化可以键入的已知代码,我们唯一希望模型值的是代码。看起来似乎是一件相当标准的事情。
答案 0 :(得分:0)
您需要将值设置为控制器中的整个对象。
$scope.myColor ={name:'red', code:'rd'};
然后它将正确选择。