2015-04-24 47 views
0

我有Angular.js v1.3.11和ng-options指令的問題。接下來的問題是。我有一個我知道的模型值,但選項綁定的數據稍後會發送到AJAX請求中,Angular.js會將它作爲兩個選定的選項生成:使用我的值和第一個選項。預定義的模型值和ng選項後綁定

的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

+1

你真的沒有很好地定義你的問題,而plunker演示似乎工作。我們應該在演示中看到什麼? – charlietfl

回答

0

這是1.3的已確認的bug,在1.4不復存在。更多的信息可以在here找到。

1

如果 「按曲目」 那麼你C使用$ scope.selectedYear保留在$ timeout回調函數之外。你不應該擔心選擇的屬性。改變你的代碼,包括「由o.year軌道」,並刪除了「選擇爲」部分:

<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

+0

不幸的是,根據官方文檔,這不是一個推薦的方式: 不要在同一表達式中使用select as和track by。它們不是爲了一起工作而設計的。 https://code.angularjs.org/1.3.13/docs/api/ng/directive/select – slo2ols

+0

抱歉沒有意識到這一點。將編輯我的答案與「跟蹤」的工作示例,而不使用「選擇爲」。 –

+0

感謝您的解決方案,但它意味着我需要將此模式後面的每個值都包含到對象中。我不想過度複雜化使用選定標量值的邏輯,只是爲了使它從Angular的角度出發。無論如何,好的工作,如果沒有其他選擇將被接受爲答案。 – slo2ols