我有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>
答案 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。