预定义的模型值和ng-options以后绑定

时间:2015-04-24 22:38:17

标签: angularjs

我有Angular.js v1.3.11和ng-options指令的问题。接下来是问题所在。我有一个我之前知道的模型值,但选项绑定的数据稍后会出现在AJAX请求中,而Angular.js会将其生成为两个选定的选项:使用我的值和第一个选项。

HTML

  <body ng-controller="MainCtrl">
      <select ng-model="selectedYear" ng-options="o.year as o.year for o in options"></select>
  </body>

的Javascript

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope, $timeout) {
    $scope.selectedYear = 2013;
    $scope.options = [];

    $timeout(function() {
        $scope.options = [{year: 2012}, {year: 2013}, {year: 2014}];
    });
});

输出

<select ng-model="selectedYear" ng-options="o.year as o.year for o in options" class="ng-pristine ng-valid ng-touched">
   <option value="0" selected="selected" label="2012">2012</option>
   <option value="1" selected="selected" label="2013">2013</option>
   <option value="2" label="2014">2014</option>
</select>

Plunker http://plnkr.co/edit/gFZ8Z7T5DhDPvk4G9tEU?p=preview

3 个答案:

答案 0 :(得分:1)

如果您使用&#34;跟踪&#34;然后你可以将$ scope.selectedYear留在$ timeout回调函数之外。您不应该真正担心所选属性。将您的代码更改为包含&#34;跟踪o.year&#34;并删除&#34;选择&#34;部分:

<select ng-model="selectedYear" ng-options="o.year for o in options track by o.year"></select>

同样在您的控制器中,您可以将预定义的selectedYear设置为对象。

$scope.selectedYear = {year: 2013};

这是一个有效的plnkr: http://plnkr.co/edit/UMfEIWlBwBnyj9wQ1FEx?p=preview

答案 1 :(得分:0)

我一直在遇到同样的问题。我使用了你的plunker并将位更新为1.4 RC2。要小心,因为这是一个发布候选版本并且是预发行版。

以下是工作人员http://plnkr.co/edit/UVL3dxYy0PNRcXuXG5y0?p=preview

<script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.4.0-rc.2/angular.js" data-semver="1.4.0-rc.2"></script>

答案 2 :(得分:0)

这是1.3中已确认的错误,1.4中不再存在。可以找到更多信息here