1

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

Angular v1.4 Plnkr

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

4

1 回答 1

0

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

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

然后它将正确选择。

于 2015-11-06T18:57:41.830 回答