我的目标是生成一个选择列表,其中的选项值设置为我的对象属性之一。将 track by binding 选项添加到 ng-options 指令时,会创建一个未知的选项元素,并且它是唯一显示被选中的选项。这种行为在 angular 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 中,它仍然没有设置初始状态,但是在选择一个新值时它会改变显示。我觉得奇怪的是这不起作用并且这不是问题。
如果您想知道,我们想要这个,以便选项值是我们的测试自动化可以键入的已知代码,而我们唯一希望模型值是代码。似乎是一个相当标准的事情。