具有track by的Angular ng-options创建未知选项元素

时间:2015-11-06 17:58:53

标签: angularjs ng-options angularjs-track-by

我的目标是生成一个选择列表,其中选项值设置为我的一个对象属性。通过绑定选项将轨道添加到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中,它仍然没有设置初始状态,但在选择新值时,它将改变显示。我觉得很奇怪,这不起作用,并且它不是一个问题。

Angular v1.4 Plnkr

如果您想知道,我们希望这样,以便选项值是我们的测试自动化可以键入的已知代码,我们唯一希望模型值的是代码。看起来似乎是一件相当标准的事情。

1 个答案:

答案 0 :(得分:0)

您需要将值设置为控制器中的整个对象。

   $scope.myColor ={name:'red', code:'rd'};

然后它将正确选择。